web-dev-qa-db-ja.com

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

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

109
Geekgirl

それはあなた次第です。 ARC(自動参照カウント)を使用してアプリを記述できます。Xcodeは「グルーコード」を記述して、ARC対応アプリをiOS 4で実行できるようにします。変更は必要ありません。ただし、特定のことが機能しない場合があり、使用する可能性のある最も顕著なライブラリの多くは(場合によって)無数のエラーをスローし、開発者がARCと互換性のある更新プログラムをリリースするまで使用できません。


Edit:最近、ファイルごとにARCをオフにできることを発見しました。 pixelfreak 's answer を参照してください。したがって、私のアドバイスは今でも有効ですが、ARCで動作するようにサードパーティライブラリを更新する必要はありません。

Appleが特定のファイルをARCからオプトアウトすることについて言っていることは次のとおりです。

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

enter image description here

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

99
sudo rm -rf

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

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

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

PS:私はこの情報をclang.llvm.orgから収集しました here これは公開されており、したがってNDAではありません。

171
pixelfreak

iOS 5はまだNDAの対象であり、おそらく公開バージョンがリリースされるまでそうです。開発者アカウントをお持ちの場合は、 Apple Developer Forums にアクセスして、そこに質問してください。

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

Edit:ここに 自動参照カウントの公開仕様iOS 5の公開ページ =:

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

10
nevan king

詳細は明るい/下NDA=現時点ではありますが、Appleここに詳述されているように、iOS 5で自動参照カウント(ARC)を実装しています: http://developer.Apple.com/technologies/ios5/

IOS 5 SDKを使用してXcode 4で新しいアプリを開発する場合、保持/リリースカウントを無視しても安全です。

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

4
Dominic

開発者またはチームの選択です。 [〜#〜] arc [〜#〜](Automatic Reference Counter)は、メモリを自動的に管理することで物事を少し簡単にしました。必要に応じて、解放、保持、および割り当て解除を行います。まだテストアプリケーションを使用していない場合は、自分でメモリを管理することをお勧めします。考慮すべきもう1つのことは、アプリケーションがサードパーティのライブラリに依存しているかどうかです。サードパーティのライブラリは、ARCに変換されない場合、アプリケーションのコンパイルを妨げます。選択は明らかに、目の前の状況に依存します。

3
Charles

誰も言及されていませんSystemConfiguration.frameworkFrameworksに入れることを忘れないでください。私はそれを実現するために悲惨なことに数時間を費やしました。

3
ThinkChris

プロジェクト設定>ビルドフェーズ>ソースのコンパイルでフラグを-fno-objc-arcとして設定します

0
Mubin Shaikh