Можно ли передать в NULL параметр блока?

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

Ответы

Ответ 1

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

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

typedef void (^GenericBlock)(void);

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

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

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

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

Ответ 2

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

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