当发布一个可能存在或不存在的实例时,我通常会这样写:
if(object!= nil)[object release];
但是因为向nil发送消息不是问题,是否需要条件?
我认为问题归结为:使用更多开销,将对象与nil进行比较,或者发送nil消息?
答案 0 :(得分:15)
请参阅this page,其中解释了将消息传递给nil(以概括您的示例)完全没问题。
对于什么有更多的开销,任何性能影响都可以忽略不计系统的整体性能(不要养成过早优化的习惯)。
答案 1 :(得分:5)
当我编写比Obj-C更多的C ++时,我总是会编写代码来检查nil
- 因为这是一个自己的注释,这个指针可以是nil
。现在,我让objc_msgSend
处理它,因为我已经习惯于读取代码,假设任何指针都可以有效地nil
。
在“安全编码”级别,我认为在每次发布后始终将指针设置为nil
更为重要(可能会在release
方法中排除dealloc
)。这样,您可以确保指针永远无效(它有效,或nil
)。
答案 2 :(得分:2)
没有必要进行检查。除非您对此代码进行了大量迭代(10,000次,可能更多),否则时间差异无关紧要。
答案 3 :(得分:2)
Obj-C检查nil
,因此不需要两次。
[object release]; object = nil;
如果你想在那里添加一些额外的代码,那么之后将指针设置为 nil
要好得多,所以它可以免于双重免费。