我一直在使用http://code.google.com/p/plblocks/一段时间来获得我们的3.2 iPad应用程序中的块支持。最近我向您指出,您可以将xcode设置为使用4.0 SDK,然后将操作系统部署目标设置为3.2。
如果我这样做,以下代码可以正常工作。
void (^world)() = ^ {
NSLog(@"Hello World");
};
NSLog(@"Hello?");
world();
但是,每当我向一个块发送消息时,我都会得到EXC_BAD_ACCESS
。例如,如果我添加以下行:
void (^acopy)() = [world copy];
这是一个问题,因为您必须复制块才能让它们在以后保持其范围。知道为什么块可以工作,但消息不会?我错过了一些设置或什么?我错误地认为需要复制吗?
答案 0 :(得分:1)
您似乎仍然可以使用Block_copy()
。我不知道为什么PLBlocks能够使用Objective-C并且内置编译器不能。
答案 1 :(得分:0)
这是一篇介绍文章:
http://developer.apple.com/mac/articles/cocoa/introblocksgcd.html
它说:
重要的是,铺设了块对象 他们也是这样的 Objective-C对象,如果该运行时是 当下。
如果没有Objective-C运行时,我真的无法看到你如何开发iPad应用程序。作为完整性检查,您可以确保C版本(Block_copy()
)有效。