【发布时间】:2012-10-21 17:12:02
【问题描述】:
我正在阅读 Cocoa 设计模式书籍。在书中,分配self 变量后,检查self 是否为nil,如下所示
if( nil != self){
// code
}
我还看到了另一种检查自我的方法
if( self ){
// code
}
使用这两种技术有什么好处,还是只是偏好问题?
谢谢。
【问题讨论】:
标签: objective-c initialization
我正在阅读 Cocoa 设计模式书籍。在书中,分配self 变量后,检查self 是否为nil,如下所示
if( nil != self){
// code
}
我还看到了另一种检查自我的方法
if( self ){
// code
}
使用这两种技术有什么好处,还是只是偏好问题?
谢谢。
【问题讨论】:
标签: objective-c initialization
if 块的内容
if (expression) {
// contents...
}
仅在 expression 评估为非零值时执行。
这意味着下面if块中的代码
//the first if block
if (self) {
// contents....
}
只要self 不为零,就会执行。
同时,this if 块的内容
// the second if block
if (self != nil) {
// contents...
}
只要self != nil 不为零,就会执行。
运算符!= 在两个比较数(本例中为self 和nil)相同的情况下返回0,在两个比较数不相同的情况下返回1。因此,只要self 与nil 不同,第二个if 块中的代码就会执行。
但是nil 是#defined 在<objc/objc.h> 中是0。因此,只要self 与0 不同,第二个if 块中的代码就会执行。这与第一个 if 块中的代码执行的时间完全相同:只要 self 不为零。
由于这两种方法导致执行完全相同的代码,因此没有技术上的理由偏爱其中一种。在这种情况下,最重要的风格考虑是初始化器中的一致性。决定您喜欢哪种风格并在任何地方使用它。
【讨论】: