Я много начал использовать блоки и вскоре заметил, что nil-блоки вызывают ошибки шины:
typedef void (^SimpleBlock)(void);
SimpleBlock aBlock = nil;
aBlock(); // bus error
Это похоже на обычное поведение Objective-C, которое игнорирует сообщения для нулевых объектов:
NSArray *foo = nil;
NSLog(@"%i", [foo count]); // runs fine
Поэтому я должен прибегнуть к обычной проверке nil, прежде чем использовать блок:
if (aBlock != nil)
aBlock();
Или используйте фиктивные блоки:
aBlock = ^{};
aBlock(); // runs fine
Есть ли другой вариант? Есть ли причина, почему nil-блоки не могут быть просто nop?