правильно проверить значение nil? - PullRequest
0 голосов
/ 07 февраля 2011

привет, я просто хочу знать, если это правильно, мы можем проверить на ноль таким образом- 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];
}

Ответы [ 3 ]

2 голосов
/ 07 февраля 2011

Да, но я бы немного его изменил:

if (!self.spinner) {
    self.spinner = [[UIActivityIndicatorView alloc] ...
    ...
}
// Do this outside the test, thus avoiding the else.
[self.spinner startAnimating];
2 голосов
/ 07 февраля 2011

Да, это правильно. И вы можете даже написать короче:

if ( !self.spinner ) {
...
}
0 голосов
/ 07 февраля 2011

Да, проверка по 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.

...