iOS:未找到符号_ojbc_loadweakretained切换目标到ios 4.3(弧)

时间:2012-07-16 08:46:49

标签: ios memory-management automatic-ref-counting

一开始我们构建了针对5.0+的iOS应用,并使用ARC进行内存管理。后来为了向后兼容,我们决定支持iOS 4.3。然后我就

  1. 已安装iOS 4.3模拟器
  2. 将应用部署目标修改为4.3
  3. 清洁,构建,运行
  4. 但该应用程序意外退出以下输出

      

    dyld:未找到符号:_objc_loadWeakRetained

         

    引自:/ Users / xxx / Library / Application Support / iPhone Simulator / 4.3.2 / Applications / 16E98912-33B5-4660-A9A3-879D92735E44 / myApp.app / myApp

         

    期望:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/Frameworks/Foundation.framework/Foundation

    我知道4.3不支持弱引用,但奇怪的是编译器在编译时从不抱怨,它只是在运行时崩溃。

    更新:
    我使用 unsafe_unretained 而不是弱关键字,应用程序仍然运行。但是我收到了许多警告,比如

      

    __ NSAutoreleaseNoPool():类__NSArrayM的对象0x564bd90自动释放,没有池到位 - 只是泄漏“*'

    这是正常的吗?如何消除这些警告?

1 个答案:

答案 0 :(得分:0)

嗯,如果问题消失,看看是否将部署目标更改回5.1会很有趣。我的猜测是不会。

我知道获得此类错误的唯一方法是:

1)是创建并发NSOperation,然后不为它提供runloop / autorelease池 2)不要在main.m中创建自动释放池 3)使用一个对象创建一个NSThread,然后尝试在该线程上发送消息而不创建自动释放池

假设问题很可能是3),您可以在past discussion

中找到如何为该线程创建池。