一开始,我们构建了面向 5.0+ 的 iOS 应用程序,并使用 ARC 来简单地进行内存管理。后来为了向后兼容,我们决定支持 iOS 4.3。然后我只是
- 安装 iOS 4.3 模拟器
- 将应用部署目标修改为 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 自动释放,没有适当的池 - 只是泄漏"* '
正常吗?如何消除这些警告?