我正在使用基于块的 API,并偶然发现了一个场景,即我传入的块参数的签名与方法所期望的 typedef'd 参数不匹配。令我惊讶的是,编译器似乎并不关心这一点,应用程序也没有崩溃。这是预期的行为吗?例子:
typedef void(^MyBlock)();
typedef void(^MyBlockWithParam)(id param);
- (void)doWork {
MyBlockWithParam block1 = ^(id param) {
NSLog(@"block1: %@", param);
};
MyBlock block2 = ^{
NSLog(@"block2");
};
[self loadData:block1];
[self loadData:block2];
}
- (void)loadData:(MyBlockWithParam)block {
block(@"foo");
}