2011-02-07 52 views
0

嗨,我只想知道这是否正确,我们可以检查零这种方式 - if(self.spinner==nil)是否检查零值这种方式是正确的?

感谢

if (self.spinner == nil) { 
    self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
    //.............needs work............. 
    CGRect center = [self.view bounds]; 
    CGSize winCenter = center.size; 
    CGPoint pont = CGPointMake(winCenter.width/2,winCenter.height/2); 
    //CGPoint pont = CGPointMake(10,40); 
    [spinner setCenter:pont]; 
    [self.view addSubview:spinner]; 
    [self.spinner startAnimating]; 
} else { 
    [self.spinner startAnimating]; 
} 

回答

0

是,检查,对nil是绝对有效的。在标头深处,nil定义为(id)0,这意味着您可以使用指针相等性将其与任何Objective-C对象进行比较。

精明的观察者将意识到的是,由于nil是零,并且目标C的条件的控制结构(ifwhile等)接受任何int样的数据类型,使用一个对象的指针作为条件本身将通过如果对象是非nil和失败,如果对象是nil

if (self.spinner) // implicitly checks that self.spinner is non-nil 
if (!self.spinner) // implicitly checks that self.spinner is nil 

根据您的背景程序员,你可能会或可能不会喜欢这个功能。但它的工作原理与nil相同。

2

是的,它是正确的。你甚至可以写出更短:

if (!self.spinner) { 
... 
} 
2

是的,但我想稍微改变它:

if (!self.spinner) { 
    self.spinner = [[UIActivityIndicatorView alloc] ... 
    ... 
} 
// Do this outside the test, thus avoiding the else. 
[self.spinner startAnimating]; 
相关问题