【问题标题】:iOS: symbol not found _ojbc_loadweakretained while switched target to ios 4.3 (arc)iOS:将目标切换到 ios 4.3 (arc) 时找不到符号 _ojbc_loadweakretained
【发布时间】:2012-07-15 02:17:51
【问题描述】:

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

  1. 已安装 iOS 4.3 模拟器
  2. 将应用部署目标修改为 4.3
  3. 清理、构建、运行

但应用程序意外退出并显示以下输出

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 自动释放,没有适当的池 - 只是泄漏“* '

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

【问题讨论】:

  • 检查你的 baseSDk 应该是 5.0。
  • 我的 baseSDK 是 5.1,我应该把它改成 4.3 吗?我在列表中找不到 4.3 sdk

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


【解决方案1】:

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

我知道出现这种错误的唯一方法是:

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

假设问题最有可能是3),您可以在此past discussion中了解如何为线程创建池

【讨论】:

    猜你喜欢
    • 2012-07-18
    • 1970-01-01
    • 2012-06-19
    • 2012-10-05
    • 2011-12-08
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多