【问题标题】:Clearing table view delegates and data sources in dealloc在 dealloc 中清除表视图委托和数据源
【发布时间】:2013-10-10 20:57:08
【问题描述】:

我直接在dealloc中清除了table view delegate和data source方法,如下:

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

但是看一些网上dealloc的例子,我发现每个人在清除委托和数据源之前都在检查视图是否加载,如下所示:

- (void)dealloc
{   
    if ([self isViewLoaded])
    {
        self.tableView.delegate = nil;
        self.tableView.dataSource = nil;
    }
}

想知道是否只是检查内存是否分配给视图,如果是则清除否则不。或者有什么特别的原因要在这里添加支票?

【问题讨论】:

    标签: ios objective-c dealloc


    【解决方案1】:

    如果您的控制器是一个表格视图控制器,那么当视图未加载时调用self.tableView 将导致它加载。如果您即将被释放,那么加载视图就没有意义了。因此,检查isViewLoaded 是一种防止这种情况发生的廉价方法。

    【讨论】:

      【解决方案2】:

      @Wain 提到的是正确的。但是,根据iOS Memory Management Guidelines,您应该 永远不要使用self 来指代initdealloc 中的ivar,就像他描述的情况一样。

      正确的做法是:

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

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 2019-07-24
        • 1970-01-01
        • 2021-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-05
        • 2015-03-13
        相关资源
        最近更新 更多