Можно ли передавать значение NULL параметру блока? - PullRequest
15 голосов
/ 20 декабря 2011

iOS не кричит на меня, когда я передаю NULL или nil в блок завершения в animateWithDuration:animations:completion:, но значит ли это, что все в порядке? Или лучше открыть пустую ^{ }?

Ответы [ 2 ]

38 голосов
/ 20 декабря 2011

Это нормально, если вы можете верить, что код, которому вы передаете nil, не будет пытаться вызвать его как блок.

Быстрая демонстрация:

typedef void (^GenericBlock)(void);

void useThisBlock(GenericBlock block){
    block();
}

useThisBlock(^{NSLog(@"All okay.");});
useThisBlock(nil);    // Compiles but crashes

Внутренний код должен сначала проверить блок: if( block ) block();

В случае кода UIKit у вас все будет в порядке.

6 голосов
/ 20 декабря 2011

Передача nil в порядке, и, на мой взгляд, дает код для более чистого чтения.

Если вы не хотите использовать блок завершения, для этого случая вы также можете использовать метод [UIView animateWithDuration:animations:].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...