我直接在dealloc中清除表视图委托和数据源方法,如下所示:
- (void)dealloc
{
self.tableView.delegate = nil;
self.tableView.dataSource = nil;
}
但是看一下dealloc的一些在线示例,我看到每个人都在检查视图是否已加载,然后清除代理和数据源,如下所示:
- (void)dealloc
{
if ([self isViewLoaded])
{
self.tableView.delegate = nil;
self.tableView.dataSource = nil;
}
}
很想知道是否只是检查内存是否已分配给视图,如果是,则清除其他情况。或者在这里添加支票有什么具体原因吗?
答案 0 :(得分:2)
如果您的控制器是表视图控制器,则在未加载视图时调用self.tableView
将导致其加载。如果你要取消分配,那么加载视图是没有意义的。因此,检查isViewLoaded
是阻止这种情况发生的廉价方法。
答案 1 :(得分:0)
@Wain提到的是对的。但是,根据你应该iOS Memory Management Guidelines
切勿使用self
来引用init
或dealloc
内的ivar,以正确处理他描述的情况。
正确的方法是:
- (void)dealloc
{
_tableView.delegate = nil;
_tableView.dataSource = nil;
}
希望这有帮助!