1. ホーム
  2. objective-c

[解決済み] iOS5 SDKのAutomatic Reference Countingに関するいくつかの質問

2022-06-20 13:01:28

質問

現在、iPad 用のアプリを開発しています。開発は iOS 4.2 用に開始され、現在 iOS 4.3 用に継続中です (そして完成すると思います)。 iOS 5 の ARC について読んだところ、基本的に、オブジェクトの解放と保持はもう必要ないことが理解できました。私の質問は

  1. もし iOS 5 にアップグレードすることに決めたら、すべての [myObject retain][myObject release] ステートメントを私のコードから削除しますか?

  2. ARC を使用して iOS 5 用の新しいアプリを開発する場合、ある種の "レトロ互換性" チェック機能を実装する必要がありますか? つまり、iOS のバージョンをチェックし、それに応じて retain および release を呼び出す必要がありますか?つまり、基本的に、ARC はすべての iOS バージョンで利用可能なのか、それとも iOS 5 だけなのでしょうか?

どのように解決するのですか?

<ブロッククオート

iOS 5 にアップグレードする場合、次のことを行う必要があります。 をすべて削除する必要がありますか? と [myObject release] ステートメントをすべて削除する必要がありますか? を削除する必要がありますか?

はい、しかし、XCode 4.2には、新しい "Migrate to Objective-C ARC" ツール(Edit->Refactorメニュー)があり、あなたのためにそれを行ってくれます。deallocの呼び出しは、別の話です。コメントで述べたように、clangのリファレンスでは、deallocメソッドを使用し続けるべきだと述べています。

理由: ARC がインスタンス変数を自動的に破棄するとしても、保持できないリソースを解放するような dealloc メソッドを記述する正当な理由があります。そのようなメソッドで [super dealloc] を呼び出すことに失敗すると、ほぼ常にバグになります。

ARCを有効にするには、新しい -fobjc-arc コンパイラーフラグを使用します。ARC は次のものでサポートされています。 Xcode 4.2 for Mac OS X v10.6 および v10.7 (64ビットアプリケーション) (64ビットアプリケーション) および iOS 4 と iOS 5 でサポートされています。 および iOS 5 でサポートされています(弱い参照は Mac OS X v10.6 および iOS 4 ではサポートされていません)。 4). Xcode では ARC はサポートされていません。 4.1.

-

<ブロッククオート

iOS 5 用の新しいアプリを ARCを使用してiOS 5用の新しいアプリを開発する場合、ある種の ある種のレトロコンパチビリティチェックを実装する必要がありますか? すなわち、iOS のバージョンをチェックし、retain と release を呼び出す必要があります。 iOSのバージョンを確認し、それに応じてretainとreleaseを呼び出す必要があるのでしょうか? を呼び出す必要があるのでしょうか?基本的に、ARCはすべてのiOSバージョンに対応しているのでしょうか? すべてのiOSバージョンで利用可能ですか? iOS 5だけですか?

ARCはコンパイル時に魔法をかけるのであって、実行時に魔法をかけるのではないからです。

<ブロッククオート

いつ を覚えておく必要はありません。 自動解放のタイミングを覚える代わりに、ARCは オブジェクトの寿命要件を評価し を評価し、自動的に 適切なメソッドコールを自動的に挿入します。 を自動的に挿入します。また、コンパイラは 適切な dealloc メソッドを生成します。 を生成します。

ARCの詳細情報。 http://clang.llvm.org/docs/AutomaticReferenceCounting.html