私はブロックベースの API を使用しており、メソッドが期待していた typedef パラメーターと一致しない署名を持つブロック パラメーターを渡していたシナリオに出くわしました。驚いたことに、コンパイラはこれを気にしていないようで、アプリはクラッシュしませんでした。これは予想される動作ですか?例:
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");
}