代码之家  ›  专栏  ›  技术社区  ›  Sean Clark Hess

在4.0->3.2向数据块发送消息时排除错误访问

  •  1
  • Sean Clark Hess  · 技术社区  · 14 年前

    我一直在使用 http://code.google.com/p/plblocks/ 有一段时间,我们的3.2版iPad应用程序将支持blocks。最近有人向我指出,可以将xcode设置为使用4.0sdk,然后将OS部署目标设置为3.2。

    如果我这样做了,下面的代码就可以工作了。

    void (^world)() = ^ {
        NSLog(@"Hello World");
    };
    
    NSLog(@"Hello?");
    
    world();
    

    但是,每当我向一个块发送消息时,我都会收到一个 EXC_BAD_ACCESS . 例如,如果我添加以下行:

    void (^acopy)() = [world copy];
    

    这是一个问题,因为您必须复制块,以便在以后保留它们的作用域。知道为什么块会工作,但消息不会吗?我是不是错过了一些场景?我是否误解了复制的必要性?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Cory Kilger    14 年前

    看来你还可以用 Block_copy() . 我不知道为什么plblocks能够使用objective-c,而内置编译器却不能。

        2
  •  0
  •   Frank Schmitt    14 年前

    这是一篇介绍文章:

    http://developer.apple.com/mac/articles/cocoa/introblocksgcd.html

    它说:

    重要的是,放置块对象 以这样的方式,他们也 如果运行时 现在。

    如果没有Objective-C运行时,我真的看不到你如何开发iPad应用程序。作为一个健全的检查,你可以确保C版本( Block_copy() )作品。