Ответ 1
Это нормально, если вы можете доверять тому, что код, которому вы передаете nil
, не будет пытаться вызвать его как блок.
Быстрая демонстрация:
typedef void (^GenericBlock)(void);
void useThisBlock(GenericBlock block){
block();
}
useThisBlock(^{NSLog(@"All okay.");});
useThisBlock(nil); // Compiles but crashes
Внутренний код должен сначала проверить блок: if( block ) block();
В случае кода UIKit вы должны быть в порядке.