2011-02-07 2 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 (if, while и тому подобное) принимать любые типы 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]; 
Смежные вопросы