2011-02-07 3 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はゼロであり、そのObjective-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]; 
関連する問題