我从github项目中读过一些源代码。该项目使用延迟加载,并覆盖getter以确保保存资源。并在dealloc中释放它。代码如下:
-(XHMessageTableView *)messageTableView {
if (!_messageTableView) {
_messageTableView = [[XHMessageTableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
_messageTableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
_messageTableView.dataSource = self;
_messageTableView.delegate = self;
_messageTableView.separatorColor = [UIColor clearColor];
_messageTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
}
return _messageTableView;
}
在init中:
[self.view addSubviews:self.messageTableView];
in dealloc:
-(void)dealloc {
_messageTableView = nil;}
ARC中的,如果覆盖它,是否有必要设置属性为nil?
答案 0 :(得分:0)
没有。
只要没有创建保留周期,就不需要将变量设置为nil。
然而,为了更好地了解作者为什么觉得有必要在tableView
上发布dealloc
,我必须仔细研究一下代码。也许他们觉得tableView
的{{1}}或delegate
强烈坚持,dataSource
并非如此,但可能是他们班级实施的情况,或者可能在代码中的其他位置创建了保留周期。