有人可以向我解释为什么这样做吗:
SpecialView *view = [[SpecialView alloc]initWithFrame:CGRectMake(0, 0, 320, 164)];
self.specialView = view;
self.tableView.tableHeaderView = self.specialView;
这不是:
self.specialView = [[SpecialView alloc]initWithFrame:CGRectMake(0, 0, 320, 164)];
self.tableView.tableHeaderView = self.specialView;
非常感谢!
编辑 1:.h 中的属性如下:
@property (weak, nonatomic) SpecialView *specialView;
当我说它不起作用时,我的意思是最后 self.specialView 为零。 (是的,我正在使用 ARC)
最佳答案
您的属性被定义为弱
。这意味着不保留引用。这也意味着当对象被释放时,该属性将被设置为 nil
。
在第一段代码中,您将 SpecialView
实例分配给本地(强)变量。这会使对象保持一段时间。然后将实例分配给(弱)属性。这没有任何帮助。但是随后您将 weak 属性分配给 TableView 的标题。在局部变量 view
超出范围后,正是这个额外的引用使实例保持事件状态。但是,如果您要为表分配另一个表头,或者如果 TableView 消失,则特殊 View 将被释放并取消分配,并且该属性将重置为 nil。
在第二段代码中,您没有局部变量。因此对象立即被释放和释放,属性被重置为 nil
。
很可能您的属性需要定义为 strong
而不是 weak
。
关于objective-c - IOS 设置属性语法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13350078/