向4.0上的块发送消息时的EXC_BAD_ACCESS - > 3.2

时间:2010-06-16 16:03:18

标签: iphone objective-c cocoa-touch ipad

我一直在使用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];

这是一个问题,因为您必须复制块才能让它们在以后保持其范围。知道为什么块可以工作,但消息不会?我错过了一些设置或什么?我错误地认为需要复制吗?

2 个答案:

答案 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())有效。