2012-01-05 13 views
7

iOS4とiOS5ベースのiPhone/iPadをサポートするiPhoneアプリケーションを開発しました。ARCかどうかARC iOS5

私のアプリケーションは、コードのサイズのためにデバッグが困難になっているいくつかの場所でメモリをリークします。私は最近、私のクエリは

  1. 私はARCでコンパイルする私のソースコード(保持/リリース/のalloc/deallocを)を変更する必要があるんです、ARC(自動参照カウント)について読みました。 ARCを使用して実行する必要があるすべての変更

  2. ARCに移行することをお勧めしますか?

  3. はiOS4を携帯電話に私のアプリの仕事は、私はARC

感謝を使用する場合。

+0

この質問をwikiエントリにすることをお勧めします...これは間違いなく、実際の意見であり、特定の状況に関連しています。 –

+1

あなたはここで3つの異なる質問をしています。 2番目は[iOS 5ベストプラクティス(リリース/保持?)](http://stackoverflow.com/questions/6308425/ios-5-best-practice-release-retain)でカバーされ、3番目は[if convert自動参照カウント(ARC)にプロジェクト、それはまだiOS 3.X、4.Xでサポートされていますか?](http://stackoverflow.com/questions/6421753/if-convert-project-to-automatic-reference-countingarc –

答えて

14

これはおそらくこの質問を掲載するのに最適な場所ではありませんが、私は質問がここにあることに気付かないので、私は答えます。

http://developer.apple.com/library/mac/#releasenotes/ObjectiveC/RN-TransitioningToARC/_index.html

  1. あなたは「>リファクタリング>のObjective-C ARCに変換編集」と手のツールは把握することはできません何かを修正する移行ツールを使用します。

  2. はい。

  3. はい、弱参照はゼロになりません。

+0

もう1つの考慮すべき点は、多くのサードパーティのライブラリにまだ良いアークバージョンがないことです。これは私の既存のプロジェクトのいくつかをアップグレードしないようにしています。 –

+2

変換を実行すると、ARCから任意のソースファイルを選択的に除外できます。 ARC変換ツールのプリフライトチェックステージでサードパーティ製のクラスファイルのチェックを外すと、それらはスキップされ、-fno-objc-arcでマークされ、ARC検証から除外されます。これは、ARCの最高の機能の1つです。同じプロジェクト内でARCファイルと非ARCファイルを混在させて組み合わせることができます。 –

4

私は間違いなく、私はARCは非常に良いシステムであり、本当によく働くと思う、プログラマはメモリ管理とどのようにシステムが実際に動作を理解することは良いことだと思います...しかし。これは本当に意見の質問ですので、非常に特殊な状況を除いて、ARCでiOS 5アプリをターゲットにする新しいプロジェクトを開始する価値はほとんどありません。

あなたのコードで多くのCライブラリを使用している場合、ARCは現在使用するのが少し難しいと感じています(つまり、CoreFoundationのようなサードパーティ製のCライブラリと主に使用している場合、それが理にかなっているかどうかを検討するかもしれませんが)、これらのライブラリがObjective-Cコントローラなどからほとんど分離されている場合でも、ARCは依然として良好です。

古いアプリの場合は、アプリの使用状況とパターンを確認する必要があります。多くのデリゲートメソッドを使用する場合、iOS 4で弱い参照を使用することはできないので、もう少し難しくなり、多分ARCと非ARCコードが混在する必要があります。 ARCを進めるために設計上の決定を下す方が良いかもしれません。新しい機能はiOS 5用に設計されており、iOS 4バージョンのアプリでは利用できない(または完全に利用できない)こともあり、それらはARCを使用します。

最終的には、アプリケーションがどのように設計されているか、大きさ、そして管理されたメモリ管理とARCの使用/制限についてどれほど快適であるかによって異なります。たとえば、私はARCに変換できない3つのプロジェクトを持っています.1つは現在混在しているプロジェクト、もう1つは完全に変換されています(ただしiOS 4+をターゲットにしています)、2つはARCとiOS 5+のみ。あなたはiOSの4をターゲットにしている場合は、ARC弱参照を使用することはできませんしながら

+0

OpenGLは技術的にはC APIですが、直接オブジェクトを保持しないため、「ブリッジ」は必要ありません。すべてのオブジェクトは内部および不透明であり、関数および整数IDによってアクセスされます。それでも、ARC Obj-Cコード内でOpenGLを使用する際に注意すべき点はありますか? –

1

明確にするために、あなたははまだ基本的にオブジェクトのプロパティのためのassignを使用するのと同じである、unsafe_unretainedを使用することができます。これは、よく書かれた非ARCコードをARCに変換できることを意味します。

unsafe_unretainedを使用すると、弱参照の自動ヌル機能がなくなりますあなたのdealloc文などでivarsをリリースすることを忘れることを心配する必要がないなど、ARCの他のすべてのメリット