【发布时间】:2013-08-09 17:06:00
【问题描述】:
我正在使用基于块的 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");
}
【问题讨论】:
-
我认为如果您将第一个更改为
void (^MyBlockType)(void),您会收到投诉。我相信空的()表示未指定的参数。 -
是的,这让编译器抱怨它。你知道这是否记录在某个地方(如果有的话我没看到)?如果您想发表评论作为答案,我会接受。谢谢
-
不确定——我从另一个问题的另一个答案中得到了这个信息 :) 让我看看。
-
我发布了一个答案,但其他一些人也发布了:)
-
我说如果你发帖我会接受你的回答,所以我会 :) +1 给其他答案,因为他们也有帮助。谢谢
标签: objective-c objective-c-blocks