【发布时间】:2008-11-25 23:48:27
【问题描述】:
当释放一个可能存在或不存在的实例时,我通常这样写:
if (object != nil) [对象释放];
但是既然向 nil 发送消息是没有问题的,那么这个条件是必要的吗?
我想问题归结为:哪个使用更多开销,将对象与 nil 进行比较,还是向 nil 发送消息?
【问题讨论】:
标签: objective-c
当释放一个可能存在或不存在的实例时,我通常这样写:
if (object != nil) [对象释放];
但是既然向 nil 发送消息是没有问题的,那么这个条件是必要的吗?
我想问题归结为:哪个使用更多开销,将对象与 nil 进行比较,还是向 nil 发送消息?
【问题讨论】:
标签: objective-c
请参阅this page,它解释了将消息传递给 nil(概括您的示例)非常好。
至于什么开销更大,任何性能影响对系统整体性能的影响都可以忽略不计(不要养成过早优化的习惯)。
【讨论】:
当我编写比 Obj-C 更多的 C++ 代码时,我总是会编写代码来检查 nil ——因为这是对我自己的一个说明,允许此指针为 nil。现在,我让objc_msgSend 处理它,因为假设任何指针都可以有效地是nil,我已经更习惯于阅读代码。
在“安全编码”级别上,我认为在每次发布后始终将指针设置为nil 更为重要(可能在dealloc 方法中排除release)。这样,您可以确保您的指针永远不会无效(它要么是有效的,要么是nil)。
【讨论】:
该检查不是必需的。除非您对此代码进行大量迭代(10,000 次,可能更多),否则时间差异是微不足道的。
【讨论】:
Obj-C 会检查nil,所以不需要重复两次。
[object release]; object = nil;
如果你想在那里添加一些额外的代码,最好将指针 设置为 nil,这样它就不会受到双重释放。
【讨论】: