IOS设置属性语法问题

时间:2012-11-12 19:20:55

标签: objective-c ios syntax properties

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

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)

1 个答案:

答案 0 :(得分:4)

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

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

在第二位代码中,您没有本地变量。因此,对象立即被释放并释放,并且属性将重置为nil

您的财产最有可能需要定义为strong而不是weak