0

我正在阅读 Cocoa Design Patterns 书籍。在书中,分配self变量后,检查是否self如下nil所示

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

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

if( self ){ 
// code 
}

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

谢谢。

4

1 回答 1

1

他们是一样的

if块的内容

if (expression) {
    // contents...
}

仅在expression评估为非零值的情况下执行。

这意味着以下if块中的代码

//the first if block
if (self) {
    // contents....
}

将在self非零时执行。

同时,这个 if块的内容

// the second if block
if (self != nil) {
    // contents...
}

每当self != nil非零时执行。

运算符在两个比较数(在本例中为和)相同的情况下返回!=,在两个比较数不相同的情况下返回。所以第二个块中的代码将在与 不同时执行。0selfnil1ifselfnil

但是d在. nil_ 因此,第二个块中的代码将在与 不同时执行。这与第一个块中的代码执行的时间完全相同:无论何时非零。#define0<objc/objc.h>ifself0ifself

结果

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

于 2012-10-23T06:05:10.827 回答