一开始我们构建了针对5.0+的iOS应用,并使用ARC进行内存管理。后来为了向后兼容,我们决定支持iOS 4.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自动释放,没有池到位 - 只是泄漏“*'
这是正常的吗?如何消除这些警告?
答案 0 :(得分:0)
嗯,如果问题消失,看看是否将部署目标更改回5.1会很有趣。我的猜测是不会。
我知道获得此类错误的唯一方法是:
1)是创建并发NSOperation,然后不为它提供runloop / autorelease池 2)不要在main.m中创建自动释放池 3)使用一个对象创建一个NSThread,然后尝试在该线程上发送消息而不创建自动释放池
假设问题很可能是3),您可以在past discussion
中找到如何为该线程创建池。