我有一个具体的问题,但找不到答案。
我有一个包含一些观点的 Storyboard。有些观点有出路。 我知道我必须将我的 socket 声明为弱参数,但是我不知道我是否必须声明 getter 和 setter(使用 @property 和 synthesize)。
1 - __weak IBOutlet UITableView *table;
2 - @property(nonatomic, weak) UITableView *table;
如果我只是声明 (1),我就可以在 View Controller 上做“表格”。
如果我声明 (1) 和 (2) 我可以做 self.table。
有什么区别?什么是最好的方法?
最佳答案
(1) 是实例变量声明。 (2) 是属性定义。如果您合成该属性,或使用自动合成,在这种情况下也会创建一个实例变量。通常,除非你想在公共(public) API 中暴露 View 或者为了多态性,声明一个实例变量就足够了。
还有一些其他特定情况可能会优先使用属性。例如,如果您想在 block 中引用 View 但不希望保留 self
,则使用 weakSelf
范例可以更轻松地访问属性。但是您也可以创建对 View 的弱引用,所以这是没有实际意义的。
访问实例变量不是使用点 (.
) 表示法,而是直接使用或较少使用的箭头 (->
) 表示法。
所以要么:
[_tableView reloadData];
或
[self->_tableView reloadData];
请记住,在 nil 引用上使用 ->
会导致错误访问。
关于ios - @property 和 Objective-C 中弱属性的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21649723/