Usage of @property and weak properties in Objective-C
我有一个具体的问题,我找不到答案。
我有一个有一些观点的故事板。 一些观点有出口。
我知道我必须将我的出口声明为弱参数,但我不知道是否必须声明getter和setter(使用@property和synthesize)。
1 2 | 1 - __weak IBOutlet UITableView *table; 2 - @property(nonatomic, weak) UITableView *table; |
如果我只是声明(1)我可以在视图控制器上执行"table"。
如果我宣布(1)和(2)我可以自我表达。
有什么不同? 什么是最好的方法?
(1)是实例变量声明。 (2)是属性定义。如果合成属性或使用自动合成,则在这种情况下也会创建实例变量。通常,除非您希望在公共API或多态中公开视图,否则声明实例变量就足够了。
还有一些其他特定情况可能是首选财产。例如,如果要引用块内的视图但不希望保留
访问实例变量不是使用点(
所以要么:
1 | [_tableView reloadData]; |
要么
1 | [self->_tableView reloadData]; |
请记住,在nil引用上使用
第一个是实例变量,第二个是定义属性。惯例是始终使用属性,现在默认为自动合成,使用在约定
你可以只为两者"表",你只需要在你的实现中使用
通常没有理由将出口声明为强势财产,这意味着所有权。大多数视图都归其超级视图所有。
1 | @property (weak) IBOutlet UITableView *table; |
然后你就像任何其他财产一样对待
1 2 3 4 5 | @synthesize table = _table; - (void)someMethod { [self.table doSomething ....] } |
另请参阅从Nib文件管理对象的生命周期