自从 ARC 首次宣布它是一个编译时的东西并且将与 iOS 4 向后兼容以来,我已经阅读和听说过。我已经使用 Xcode 4.2 的自动重构成功地将我的项目重构为 ARC,并且在针对iOS 5.0 SDK,它工作正常。但是,如果我尝试针对我的 iOS 4.2 SDK 进行编译,它会在链接时失败,缺少以下符号:
- _objc_retainAutoreleaseReturnValue
- _objc_autoreleaseReturnValue
- _objc_storeStrong
- _objc_retain
- _objc_release
- _objc_retainAutoreleasedReturnValue
我检查了,这些符号出现在 5.0 但不是 4.2:
iPhoneOS5.0.sdk/usr/lib $ find . -type f|xargs nm|grep -i _objc_retain$
00005ed0 T _objc_retain
000061d0 T _objc_retain
iPhoneOS4.2.sdk/usr/lib $ find . -type f|xargs nm|grep -i _objc_retain$
[... *crickets* ...]
这是否意味着苹果在撒谎?相反,我假设我很困惑并且做错了什么,但我不知道是什么。
这是 Xcode 4.2 (Build 4C199) 的 GM 版本