【问题标题】:Objective-C self variable checkObjective-C 自变量检查
【发布时间】:2012-10-21 17:12:02
【问题描述】:

我正在阅读 Cocoa 设计模式书籍。在书中,分配self 变量后,检查self 是否为nil,如下所示

if( nil != self){
// code
}

我还看到了另一种检查自我的方法

if( self ){ 
// code 
}

使用这两种技术有什么好处,还是只是偏好问题?

谢谢。

【问题讨论】:

标签: objective-c initialization


【解决方案1】:

他们是一样的

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 不为零,就会执行。

运算符!= 在两个比较数(本例中为selfnil)相同的情况下返回0,在两个比较数不相同的情况下返回1。因此,只要selfnil 不同,第二个if 块中的代码就会执行。

但是nil#defined 在<objc/objc.h> 中是0。因此,只要self0 不同,第二个if 块中的代码就会执行。这与第一个 if 块中的代码执行的时间完全相同:只要 self 不为零。

结果

由于这两种方法导致执行完全相同的代码,因此没有技术上的理由偏爱其中一种。在这种情况下,最重要的风格考虑是初始化器中的一致性。决定您喜欢哪种风格并在任何地方使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-08
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多