为啥在释放对象后使用'nil'
Posted
技术标签:
【中文标题】为啥在释放对象后使用\'nil\'【英文标题】:Why using 'nil' after releasing objects为什么在释放对象后使用'nil' 【发布时间】:2011-12-28 09:31:22 【问题描述】:有时我在 Objective-c 中看到了这种类型的编码。为什么释放后设置_imageView为nil。
- (void)dealloc
[_imageView release];
_imageView = nil;
[super dealloc];
【问题讨论】:
【参考方案1】:这是为了确保您不会尝试重复使用刚刚发布的对象。
通过将其设置为 nil
,您可以确保将来发送给它的任何消息都将被丢弃(标准 nil
对象的行为)而不是引起问题。
【讨论】:
在旁注中,通常不需要在dealloc
方法中将 ivar 设置为 nil。除非有人对超类 ivars 做一些骇人听闻的事情。【参考方案2】:
只是因为这是安全的做法。
在 dealloc 中,除非您使用线程,否则它实际上并没有多大意义,但除此之外,每次将 nil 分配给对象时都这样做总是好的(除非它是一个属性)。
【讨论】:
【参考方案3】:据我了解,在 dealloc 中没有必要。但是,当在任何其他方法中释放对象时,指针仍将保留,但它指向的对象将不再存在,从而在向其发送消息时导致崩溃。
通过将指针设置为 nil,您可以确保发送给它的任何消息都将被忽略,而不是使您的应用程序崩溃(或导致奇怪的行为)。
【讨论】:
以上是关于为啥在释放对象后使用'nil'的主要内容,如果未能解决你的问题,请参考以下文章