Xcode 4.2で自動参照カウントを使用してアプリケーションをビルドしているときに-retain
、-release
、および-dealloc
を使用しようとすると、次のようなエラーが発生します。
自動参照カウントは「dealloc」の明示的なメッセージ送信を禁止します
このエラーが表示されるのはなぜですか? -retain
、-release
、および-dealloc
は、自動参照カウントでは許可されなくなりましたか?
基本的に:
ARCを使用する場合、それは全部かゼロかです。コンパイラが保持/リリース/割り当て解除のすべてを管理しているか、何もしていません。コンパイラはそれ自体すべてを実行したいので、あなたはできないそれらへの独自の呼び出しを散在させます。これにより、不合理な最適化が行われる可能性があります(たとえば、手動メモリ管理で自動解放されたオブジェクトを返したメソッドが、自動解放プールで終わることのないオブジェクトを生成する場合があります)。保持と解放の独自の呼び出しを散りばめると、コンパイラーはこれらを処理する必要があり、必要な(そして必要な)最適化の多くを実行できなくなります。
追加のボーナスとして、-retainCount
がコンパイラエラーになりました! OH HAPPY DAY!
自動参照カウントでは、保持、解放、および割り当て解除は許可されません。
既存のコードがある場合は、-fno-objc-arcをそのまま使用して、任意のファイルのARCを選択的に無効にすることができます。
複数のファイルでARCを無効にする場合:
XcodeのENTERキーを押して、ターゲット/ビルドフェーズ/ソースのコンパイルで目的のファイルを選択します。 (ダブルクリックするとファイルが1つだけ選択されます)-fno-objc-arcと入力しますEnterまたはDoneを押します
aliSoftwareへの対応:私たちCNAは、ARTCフレームワークと非ARCフレームワーク、そしてアークソースと非ARCソースを混合しています。
(やったよ..)
基本的なアイデアは次のとおりです。1)非常に優れたカカオプログラマーができるように、コンパイラーは呼び出しを挿入/削除します2)ココアは常にCコードであるため、別々のコンパイルがあるため、リンカーは複数のソースによって生成されたバイナリをリンクできます。 asmとココア、またはCとPascalを混ぜることができるので、考えてみてください。
主な意見として、c#/ Javaはここにあります:常に混合することができ、ランタイム以外のコンパイラー手法を使用します。)Appleadvantegeは、パフォーマンスを大幅に向上させることができます。
Xcode ARC
の answer で指摘したように、specificARC
以外のソースファイル。 Dave DeLong の答えは少しずれています。 ARC
対応プロジェクトでソースを非ARC
としてコンパイルするようコンパイラーに指示できるという事実は含まれていません(説明されているように here )。