0

有人可以向我解释为什么这有效:

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)

4

1 回答 1

4

您的属性定义为weak。这意味着不保留引用。这也意味着当对象被释放时,该属性将被设置为nil.

在第一段代码中,您将SpecialView实例分配给本地(强)变量。这会使对象保持一段时间。然后将实例分配给(弱)属性。这没有任何帮助。但是随后您将 weak 属性分配给表视图的标题。view在局部变量超出范围后,正是这个额外的引用使实例保持活动状态。但是,如果您要为表分配另一个标题或者如果表视图消失了,则特殊视图将被释放并解除分配,并且该属性将被重置为零。

在第二段代码中,您没有局部变量。所以对象立即被释放和释放,属性被重置为nil.

很可能您的属性需要定义为strong而不是weak.

于 2012-11-12T19:31:09.763 回答