在发送发布消息之前检查是否为零?

时间:2008-11-25 23:48:28

标签: objective-c

当发布一个可能存在或不存在的实例时,我通常会这样写:

if(object!= nil)[object release];

但是因为向nil发送消息不是问题,是否需要条件?

我认为问题归结为:使用更多开销,将对象与nil进行比较,或者发送nil消息?

4 个答案:

答案 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要好得多,所以它可以免于双重免费。