在dealloc中清除表视图委托和数据源

时间:2013-10-10 20:57:08

标签: ios objective-c dealloc

我直接在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;
    }
}

很想知道是否只是检查内存是否已分配给视图,如果是,则清除其他情况。或者在这里添加支票有什么具体原因吗?

2 个答案:

答案 0 :(得分:2)

如果您的控制器是表视图控制器,则在未加载视图时调用self.tableView将导致其加载。如果你要取消分配,那么加载视图是没有意义的。因此,检查isViewLoaded是阻止这种情况发生的廉价方法。

答案 1 :(得分:0)

@Wain提到的是对的。但是,根据你应该iOS Memory Management Guidelines 切勿使用self来引用initdealloc内的ivar,以正确处理他描述的情况。

正确的方法是:

- (void)dealloc
{
    _tableView.delegate = nil;
    _tableView.dataSource = nil;
} 

希望这有帮助!