objective-c - IOS 设置属性语法问题

标签 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)

最佳答案

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

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

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

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

关于objective-c - IOS 设置属性语法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13350078/

相关文章:

mysql - MySQL 中 IF 语句的正确语法是什么?

objective-c - 如何解决这个错误?找不到实例方法 '-attributesOfItemAtPath:eror:'(返回类型默认为 'id')

iphone - 未调用完成 block 。如何检查有效性?

iphone - 在 UIWebView 内部使用 url 方案来更改 UILabel

delphi - 我可以在 Delphi/Pascal 中一次性分配数组中的项目吗?

java - 除非那些内部类也被声明为静态,否则我们不能在 [public] 内部类中声明静态方法的确切原因是什么?azi

objective-c - 如何管理一个简单的模型对象来加载其所有实例?

ios - 旋转后更改UITextView字体大小在iOS 5上很奇怪

iphone - 即时更改 NSFetchedResultsController 中的排序

ios - 发布后更改翻译