ARCがコンパイル時のものであり、iOS 4との下位互換性があると最初に発表されて以来、私は読んだり聞いたりしました。Xcode4.2の自動リファクタリングを使用してプロジェクトをARCにリファクタリングし、 iOS 5.0 SDK、それは正常に動作します。ただし、iOS 4.2 SDKに対してコンパイルしようとすると、リンク時に失敗し、次のシンボルが欠落しています。
チェックしたところ、これらのシンボルは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)のリリースです。
ARCはiOS 4.3以降でサポートされています。 iOS 5.x SDKを使用する必要がありますが、展開ターゲットとしてiOS 4.3を選択できます。 4.xでサポートされていないのは、自動弱参照のゼロ化です。
Objective-Cの機能可用性インデックスについては、Appleのドキュメント こちら を参照してください。
Xcode 4.4および4.5を使用してアプリを送信できます。
NSDictionaryとNSArrayの添え字は、OS X 10.6とiOS 4にデプロイされることに注意してください。デプロイメントターゲットも必ず設定してください。
少し遅れますが、これは重要な情報です。受け入れられた答えは正解です AppleはiOS 4.0以降と述べています ARCサポートの最小OSとして。
ただし、状況によっては壊れることがあります。それらの1つはもちろん__weak
キーワードとその派生物。次のようなエラーが表示されます。
dyld: lazy symbol binding failed: Symbol not found: _objc_initWeak
2番目の非常に危険な状態は、+load
NSObjectのメソッド。 iOS 4.xでARCを使用してこれを行うと、実行時にクラッシュを見つけるのが非常に困難になります。次のようなランタイムエラーが発生した場合は、+load
メソッド。私にとっては、その特定のファイルに-fno-objc-arcフラグを設定することができました。
dyld: lazy symbol binding failed: Symbol not found: _objc_retainAutoreleasedReturnValue