【问题标题】:What is the difference between setting object = nil and [object release] VS [object release] and object = nil?设置object = nil和[object release] VS [object release] and object = nil有什么区别?
【发布时间】:2011-12-30 08:32:57
【问题描述】:

这两个代码sn-ps有什么区别:

object = nil;
[object release]

对比

[object release];
object = nil;

最佳做法是什么?

【问题讨论】:

标签: objective-c ios release


【解决方案1】:
object = nil; 
[object release]

不要那样做。你正在向一个 nil 对象发送 release 消息,它什么都不做。但是您的对象引用的对象仍在内存中,因为它从未收到过release 消息。

[object release]; 
object = nil;

在这里您释放对象,为了方便和安全,您将nil 设置为它的引用。所以你可以调用(当然是错误的:-))该对象上的任何方法,应用程序不会崩溃。

但是如果你使用保留属性@property(nonatomic, retain),调用:

self.object = nil;

等于调用:

[object release]; 
object = nil;

【讨论】:

  • 嗨@Oliver,当'您使用保留属性@property(非原子,保留)'时,[object release];[object release];object = nil; 是否相等?
  • @Kjuly:不,如果你只是释放它,它不会被设置为nil。如果你将它设置为 nil,它会被释放并设置为 nil。如果释放它并将其设置为 nil,则与将其设置为 nil 相同。当然是保留财产。
  • @Oliver 在上一部分中,您说过设置 nil 来保留属性等于 release + nil。可以链接到文档吗?
  • @entropy :网上的一些搜索将帮助您找到文档。关键是当您将保留属性设置为 nil 时,您会删除指向“旧”对象的链接,因此它不再保留并被释放(这就是保留属性的工作方式)。并且属性的新值变成了你输入的值,所以它是 nil。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 2019-12-06
  • 2013-04-11
  • 2014-09-03
  • 2014-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多