iOS 5 にアップグレードすることにした場合、コードから [myObject preserve] および [myObject release] ステートメントをすべて削除する必要がありますか?
はい。ただし、XCode 4.2 には新しい「Migrate to Objective-C ARC」ツール ([編集] -> [リファクタリング] メニュー) が含まれています。dealloc の呼び出しは別の話です。コメントで述べたように、clang リファレンスには、dealloc メソッドを保持する必要があると記載されています。
根拠: ARC はインスタンス変数を自動的に破棄しますが、保持できないリソースを解放するなど、dealloc メソッドを作成する正当な理由があります。このようなメソッドで [super dealloc] の呼び出しに失敗すると、ほとんどの場合バグになります。
新しい -fobjc-arc コンパイラ フラグを使用して ARC を有効にします。ARC は、Mac OS X v10.6 および v10.7 (64 ビット アプリケーション) および iOS 4 および iOS 5 の Xcode 4.2 でサポートされています (弱い参照は、Mac OS X v10.6 および iOS 4 ではサポートされていません)。Xcode 4.1 では ARC はサポートされていません。
-
ARC を使用して iOS 5 用の新しいアプリを開発する場合、何らかの「レトロ互換性」チェックを実装する必要がありますか? つまり、iOS のバージョンを確認し、retain と release を適宜呼び出す必要がありますか? では基本的に、ARC はすべての iOS バージョンで利用できるのでしょうか、それとも iOS 5 だけで利用できるのでしょうか?
いいえ、ARC は実行時ではなくコンパイル時にマジックを実行するためです。
ARC は、retain、release、および autorelease をいつ使用するかを覚えておく必要はありません。ARC は、オブジェクトの有効期間要件を評価し、コンパイル時に適切なメソッド呼び出しを自動的に挿入します。コンパイラは、適切な dealloc メソッドも生成します。
ARC に関する詳細情報: http://clang.llvm.org/docs/AutomaticReferenceCounting.html