设置IBOutlets在dealloc中为nil

4th*_*ace 8 iphone cocoa-touch memory-management objective-c

在这里标题为"内存警告"的部分http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmNibObjects.html中,我不遵循为什么IBOutlet设置为nil in dealloc.如果

self.anOutlet = nil
Run Code Online (Sandbox Code Playgroud)

如本主题所述导致崩溃,为什么他们将ivar设置为nil?

一般来说,当你已经调用释放时,为什么你会在dealloc中将ivar设置为nil?

Dar*_*ren 12

在a之后release,指针基本上无效并再次访问它可能会导致崩溃.通过一个变量设置为nil后,release就可以防止发生之崩溃.访问nil指针没有坏处.

您链接的示例只是简单地说明了为什么将变量或ivar设置为nilafter后总是一个好主意release,即使它看起来不会再次访问变量/ ivar.

在该示例中,anOutletivar实际上是您的dealloc方法之后由超类访问的,因此如果您未将其设置为nil,则会发生崩溃.这样的场景很难通过查看代码来发现,所以在发布之后将每个变量都清零是个好主意,即使在dealloc中也是如此.