Я читал и слышал с тех пор, как ARC впервые объявили, что это было во время компиляции и будет обратно совместимо с iOS 4. Я успешно реорганизовал свой проект в ARC с помощью автоматического рефакторинга Xcode 4.2, и когда скомпилировано с 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* ...]
Значит ли это, что Apple соврала? Вместо этого я предполагаю, что я смущен и делаю что-то не так, но я не могу понять, что.
Это с выпуском GM Xcode 4.2 (Build 4C199)