Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c self.prop=nil;vs.[支柱释放];prop=零;_Objective C - Fatal编程技术网

Objective c self.prop=nil;vs.[支柱释放];prop=零;

Objective c self.prop=nil;vs.[支柱释放];prop=零;,objective-c,Objective C,如果我使用的是合成属性,那么我为什么不简单地说: self.property = nil; 这将释放ref计数,并确保我没有悬空指针 看起来很简单,但我看到的99%的代码似乎都是这样做的: [property release]; property = nil; 是的,在大多数情况下,它们是财产。 我有种可怕的感觉,我错过了什么? 有点像当我忘记在一些属性前面加上“self.”时,我想知道它为什么会崩溃:-)如果你试图在dealloc方法之外的任何地方清除属性的值,那么self.propert

如果我使用的是合成属性,那么我为什么不简单地说:

self.property = nil;
这将释放ref计数,并确保我没有悬空指针

看起来很简单,但我看到的99%的代码似乎都是这样做的:

[property release];
property = nil;
是的,在大多数情况下,它们是财产。 我有种可怕的感觉,我错过了什么?
有点像当我忘记在一些属性前面加上“self.”时,我想知道它为什么会崩溃:-)

如果你试图在dealloc方法之外的任何地方清除属性的值,那么
self.property=nil是最好的方法。它将为您处理所有内存管理任务,有助于防止任何问题


如果您使用的是
dealloc
方法,那么发布该ivar的最佳方式将引起争议,但是
[property release]self.property
可能会产生副作用,因此建议使用code>。在
dealloc
方法中,调用
property=nil是不必要的。

有一个警告<代码>self.property=nil将触发任何KV观察员,而直接访问则不会。这两种方法都是可行的,但哪种方法是合适的是一个意见的问题。这也取决于期望的结果是什么。有时你想让那些观察员开火,有时你想绕过他们。