我开始大量使用块,很快就注意到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?
发布于 2012-05-07 15:54:03
这是我最简单最好的解决方案…也许有可能用这些c var-args编写一个通用的运行函数,但我不知道如何编写。
void run(void (^block)()) {
if (block)block();
}
void runWith(void (^block)(id), id value) {
if (block)block(value);
}
https://stackoverflow.com/questions/4145164
复制相似问题