4
为什么nil / NULL块在运行时会导致总线错误?
我开始大量使用块,不久便注意到零块会导致总线错误: 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个块不能仅仅是点头的原因?