我开始大量使用块,很快就注意到空块会导致总线错误:
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?