iOS 5のベストプラクティス(リリース/保持?)


109

iPhoneプログラマーとして、iOS 5以前のバージョンで使用するアプリを作成するためのベストプラクティスは何ですか?具体的には、データのリリース/保持を引き続き使用する必要がありますか、それとも無視する必要がありますか?それは重要ですか?


1
ARCを使用し、以下に概説されているベストプラクティスに従います。amattn.com / 2011 / 12 / 07 / arc_best_practices.htmlこれを行うと、ARCが「正しく動作する」ことがわかります。これらのプラクティスに従わないと、リークが発生し、追跡に多くの時間を費やすことになります
。–

回答:


98

それはあなた次第です。ARC(自動参照カウント)を使用してアプリを記述できます。Xcodeは「グルーコード」を書き込んで、ARC対応アプリをiOS 4で実行できるようにします。変更は必要ありません。ただし、一部の機能が動作せず、使用したいと思う可能性のあるほとんどのライブラリが(場合によっては)無数のエラーをスローし、開発者がARCと互換性のあるアップデートをリリースするまでそれらを使用できなくなります。


編集:私は最近、ファイルごとにARCをオフにできることを発見しました。pixelfreakの回答をご覧ください。ですから、私のアドバイスはまだ残っていますが、今ではサードパーティのライブラリをARCで動作するように更新する必要はありません。

Appleが特定のファイルに対してARCをオプトアウトすることについて、次のように述べています。

プロジェクトを移行してARCを使用する場合、-fobjc-arcコンパイラフラグがすべてのObjective-Cソースファイルのデフォルトとして設定されます。特定のクラスのARCを無効にするには、そのクラスの-fno-objc-arcコンパイラフラグを使用します。Xcodeのターゲットビルドフェーズタブで、[ソースのコンパイル]グループを開き、ソースファイルのリストを表示します。フラグを設定するファイルをダブルクリックし、ポップアップパネルに-fno-objc-arcと入力して、[完了]をクリックします。

ここに画像の説明を入力してください

こちらの完全な移行ガイドをご覧ください


15
ARCは明らかに「ファイルごと」にオフにすることができ、おそらくレガシーライブラリの使用を許可する可能性があります。私はそれについてかなり興奮しています。iOS開発者が保持/リリースする必要がない世界を想像できますか?ここでSOについて何を話しますか?;-)
Dan Ray

45
私がついにそのすべてのメモリ管理のがらくたをうまく処理したとき、それからそれらはそれを無関係にしています。仕事!!!
Kongress 2011年

@ダン:冗談ではなく、選択的にオフにすることができますか?私にとって重要なリンクを教えてください!:D
sudo rm -rf

1
私は、コンパイラは、今では選択的に、あなたのコードからいくつかのファイル(通常は、サードパーティのソースフォルダ)を除外するためにNDAの下ではないと信じて、単に各ファイルへのコンパイラオプションとしてこれを追加します -fno-objc-arc
blackjack75

2
@年:はい、そうです。そんなに単純だったらいいのにと思っていますが、残念ながらすべてのライブラリがそれほど単純なわけではありません。テイクJSONKit例えば、。ARCチェックを実行してみてください。私の言っていることがわかります。;)
sudo rm -rf

170

個々のファイルでARCをオフにする方法にまだ興味がある人のために、これが私がしたことです:

  1. 以下のプロジェクト設定に移動します Build Phases > Compile Sources
  2. ARCを無効にするファイルを選択し、-fno-objc-arcコンパイラフラグを追加します。複数のファイルにフラグを設定するには、ファイルを選択して「Enter」キーを押します。

これが推奨される方法かどうかはわかりませんが、私にとってはうまくいきます。

PS:私はここでclang.llvm.orgからこの情報を収集しました。これは公的にアクセス可能なため、NDAの下ではありません。


1
ライブラリでこのフラグを使用すると機能しますが、lib .hファイルをARCクラスに含めるとすぐに、Xcodeは、フラグがそこにないかのように不平を言います。古いフラグをこのフラグで動作させることができましたか?
ケイシー

ASIHttpRequestとSBJsonを機能させることができます(Reachability.hでの構造体の使用に関する警告が1件表示されます)。私はフラグをすべての実装ファイルに入れました。
pixelfreak

すべての実装ファイルまたは.hだけですか?プロジェクトの[ソースのコンパイル]セクションには、ヘッダーファイルのみがあり、実装ファイルはありません。追加することはできますが、別の効果はないようです。参考までに、RESTパーサーを動作させるようにしています。(github.com/mirek/NSMutableDictionary-REST.framework
ケーシー

1
ああ!私はエラーを十分に注意深く見ていませんでした。これらは、フラグがない場合とは異なるエラーです。自動解放プールをコードから削除する必要がありました。
ケーシー、2011年

ここで提案されているように、複数のファイルを選択してEnterキーを押すと、それらはすべてビルドフェーズの「コンパイルソース」から削除されました。個別に選択する必要がありました。私が何か間違ったことをしているかどうかわからない。
Gopalakrishnan Subramanian

10

iOS 5はまだNDAの下にあり、おそらく彼らがパブリックバージョンをリリースするまでになるでしょう。開発者アカウントをお持ちの場合は、Apple開発者フォーラムにアクセスして質問してください。

以前のバージョンでは、参照をカウントし、それに応じて保持およびリリースする必要があります。チェックアウトメモリ管理ガイドを

編集:ここにあります自動参照カウントのための公開仕様およびからの引用公共のiOS 5ページ

Objective-Cの自動参照カウント(ARC)は、メモリ管理をコンパイラの仕事にします。新しいApple LLVMコンパイラでARCを有効にすることで、型の保持やリリースを再度行う必要がなくなり、クラッシュやメモリリークを減らしながら、開発プロセスを大幅に簡略化できます。コンパイラーはオブジェクトを完全に理解し、使用されなくなった瞬間に各オブジェクトを解放するため、アプリは予測可能なスムーズなパフォーマンスでこれまでと同じくらい高速に実行されます。


iOS 5を使用して開発されたアプリケーションは、古いiPhoneで動作しますか?
Geekgirl

このツールを使用して古いOS用に開発することはできますが、ARCなどの新しいテクノロジーを使用することはできません。古いOSをターゲットにする場合は、手動でメモリ管理を行う必要があります。あなたはARCを使用する場合は、iOS 5へのユーザーを制限する必要があります
nevan王

1
ARCへの参照は、一般向けのAppleページdeveloper.apple.com/technologies/ios5にあるため、少なくとも一部はNDAの対象外です。
cobbal 2011年

8
実はそうではありません。ARCを使用してiOS 4用にビルドできます。Appleエンジニアの引用:「iOS 4およびMac OS 10.6の場合、コンパイラーはアプリにランタイム互換性グルーコードを少し追加します。これは、互換性コードが提供できるよりも多くのサポートを必要とする__weak変数を除くすべてに機能します。iOS上のARC 4は非ARCコードよりもシンプルですが、iOS 5のARCほどシンプルではありません。 "ちなみに、WWDCスケジュールアプリはARCで記述されており、iOS 4でも問題なく動作しました。
sudo rm -rf

3
うん。ただし、4.3.xのターゲットのみが「互換性の接着剤」を取得するため、ARCトークで認定されました。
アランZeino 2011

4

詳細は現時点では軽量/ NDAに準拠していますが、AppleはiOS 5に自動参照カウント(ARC)を実装しています。詳細はこちら:http : //developer.apple.com/technologies/ios5/

iOS 5 SDKを使用してXcode 4で新しいアプリを開発する場合、保持/リリースのカウントを無視しても問題ありません。

[編集] sudo rm -rfは良い点です。サードパーティのライブラリが著しく影響を受ける可能性があります


iOS 5を使用して開発されたアプリケーションは、古いiPhoneで動作しますか?
Geekgirl

iOS 5を実行しているiPhoneで動作するため、iPhone 3GSまたはiPhone 4のみが動作します。iOS4をサポートするとは思われませんが、LLVMによってコンパイル時に実行されるため、バイナリを生成できる可能性がありますiOS 4および5。iOS開発者アカウントを取得し、利用可能なオプションをいじることを強くお勧めします。
ドミニク

sudoがnevanの回答に関する彼のコメントで指摘しているように、ARCを使用してiOS 4.0にターゲットを戻すことができるため、そのOSを実行できる古いデバイスはこれと互換性があります。
ブラッド・ラーソン

3

SystemConfiguration.frameworkについて誰も言及していませんか?フレームワークに組み込むことを忘れないでください。私はそれを実現するために惨めに数時間を費やしました。


理由を説明する必要があります。
John Riselvato 2013年

3

それは確かに開発者またはチームの選択です。ARC(自動参照カウンター)は、メモリを自動的に管理することで、処理を少し簡単にしました。必要に応じて解放、保持、割り当て解除します。私は、まだ行っていない場合は、テストアプリケーションでメモリを自分で管理する経験を積む必要があると思います。考慮すべきもう1つのことは、アプリケーションがサードパーティのライブラリに依存しているかどうかです。ARCに変換しないと、アプリケーションのコンパイルが妨げられます。選択は明らかに手元の状況に依存します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.