【问题标题】:Is setting a property to nil same as releasing the property?将属性设置为零与释放属性相同吗?
【发布时间】:2011-08-30 18:55:17
【问题描述】:

有什么区别

self.myObject = nil;

[myObject release];

还有,为什么viewDidUnload方法一般用前者,dealloc方法用后者?

【问题讨论】:

标签: iphone objective-c ios memory-management


【解决方案1】:

约翰的回答是正确的。基本上不需要为dealloc 中的任何变量设置任何值,因为该对象正在被垃圾收集。我认为可以提出一种情况,即视图被卸载,但仍然会调用一些方法。在这种情况下,将局部变量设置为nil 是安全的,以便能够发送消息而不会崩溃。

前段时间,Jeff LaMarche 有一个博客 post,内容是“to nill or not to nill”。看一看,尤其是最后一节。

【讨论】:

    【解决方案2】:

    假设一个retain 属性,那么这个:

    self.myObject = nil;
    

    将释放对象并将属性的值设置为nil。它还将通过 setter 方法执行此操作,可能会触发 KVO 通知。还有这个:

    [myObject release];
    

    只会释放对象,在属性中留下一个悬空指针。

    后者通常在-dealloc 中使用,因为在对象被释放后您不关心变量的值,并且还因为您不想从正在被销毁的对象触发 KVO 通知。前者几乎在其他任何地方都使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多