有人可以向我解释为什么会这样:
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)
答案 0 :(得分:4)
您的媒体资源定义为weak
。这意味着不保留引用。这也意味着当对象被释放时,该属性将设置为nil
。
在代码的第一位,您将SpecialView
实例分配给本地(强)变量。这使对象保持一点。然后将实例分配给(弱)属性。这没有任何帮助。但是,然后将weak属性分配给表视图的标题。这是额外的引用,在局部变量view
超出范围后使实例保持活动状态。但是,如果您要为表分配另一个标头,或者如果表视图消失,则会释放并释放特殊视图,并将该属性重置为nil。
在第二位代码中,您没有本地变量。因此,对象立即被释放并释放,并且属性将重置为nil
。
您的财产最有可能需要定义为strong
而不是weak
。