为什么Clang在向“void(^)()”赋予非匹配块时不会发出警告(与“void(^)(void)”相反)?

时间:2014-01-30 15:43:55

标签: objective-c xcode clang objective-c-blocks

假设您在对象上有三个方法:

- (void) handleBlockA:(void(^)())block;
- (void) handleBlockB:(void(^)(void))block;
- (void) handleBlockC:(dispatch_block_t)block;

现在你打电话给他们:

[self handleBlockA:^(NSString*s){}];
[self handleBlockB:^(NSString*s){}];
[self handleBlockC:^(NSString*s){}];

在一个干净的Xcode项目中,Clang将警告您handleBlockA:调用,但会为其他两个调用引发错误。事实上,在block()方法(handleBlockA:)中调用objc_storeStrong后,第一个将很快运行并崩溃。

为什么呢? void(^)()void(^)(void)之间有什么区别? 是否有编译器标志会使Clang也警告handleBlockA:电话?

0 个答案:

没有答案