Xcode 4.5 で古いプロジェクトをコンパイルすると、次の警告が表示されます。
ARC を使用しない場合、'__bridge' キャストは効果がありません
コードが ARC プロジェクトと非 ARC プロジェクトの両方で適切に機能するように、この警告を取り除く適切な方法は何ですか?
Xcode 4.5 で古いプロジェクトをコンパイルすると、次の警告が表示されます。
ARC を使用しない場合、'__bridge' キャストは効果がありません
コードが ARC プロジェクトと非 ARC プロジェクトの両方で適切に機能するように、この警告を取り除く適切な方法は何ですか?
個々のソース ファイルは、ARC でコンパイルするか、ARC でコンパイルしない必要があります。それがどちらであるかを決めて、特定のソースファイルに対して常にその方法を使用する必要があります。メモリ管理の命名規則に従っていれば、ARC ソース ファイルと非 ARC ソース ファイルを同じプロジェクトに混在させることができます。
私が上記のように言う理由は、ARC 用に書かれたコードを ARC なしでコンパイルすると、すべての保持、解放、および自動解放のおかげで、いたるところでメモリ リークと時期尚早の割り当て解除が発生するからです。がありません。
いくつか#define
の を使用すると、MRC、ARC、および GC の複数に対して正しくコンパイルされるソース ファイルを作成することができます。
Xcode では、次のように記述できることがわかっているため、ARC と GC の両方を有効にすることはできません。
#if defined(__OBJC_GC__)
# define USING_GC 1
#else
# define USING_GC 0
#endif
#if __has_feature(objc_arc)
# define USING_ARC 1
#else
# define USING_ARC 0
#endif
#if USING_ARC || USING_GC
# define USING_MRC 0
#else
# define USING_MRC 1
#endif
USING_GC
これは、USING_MRC
との 1 つだけを定義し、残りの 2 つを としてUSING_ARC
定義します。これをプロジェクトのプレフィックス ヘッダー (.pch) に入れることができます。1
0
これらの定義をコードで直接使用して、ブリッジ キャストなどを含めたり除外したりできます。または、使用中のメモリモデルに基づいて適切なコードに展開されるメモリ呼び出し、キャストなどのマクロを定義することをお勧めします。
HTH
そのファイルの ARC を有効にするだけです。
-fobjc-arc
([ビルド フェーズ] > [コンパイル ソース] > [コンパイラ フラグ] に移動)