8

私はARCコードと非ARCコードの両方のアプリを持っています。コンパイラは、ARC以外のコードをARCとしてコンパイルしようとするとキャッチします。 ARCコードがARCなしで誤ってコンパイルされたときに、コンパイル時にエラー/通知を発生させるにはどうすればよいですか?明らかに、コードはコンパイルされます。それはちょうど漏れるだろう。スタティックアナライザは問題を捕捉します。私はむしろプラグマを残したり、ARCコードで定義する方法を見つけることになります。クラスでARCを要求する方法は?

次はobjc-api.hにアップルが定義されています

/* OBJC_ARC_UNAVAILABLE: unavailable with -fobjc-arc */ 
#if !defined(OBJC_ARC_UNAVAILABLE) 
# if __has_feature(objc_arr) 
#  define OBJC_ARC_UNAVAILABLE __attribute__((unavailable("not available in automatic reference counting mode"))) 
# else 
#  define OBJC_ARC_UNAVAILABLE 
# endif 
#endif 

私のC-マクロ-FUは弱いです。どうすれば使えますか?または、おそらくより良い象徴がありますか?

P.S.再利用可能なライブラリから多くのアプリケーションをビルドするので、私は尋ねます。私は、各ファイルが適切な方法でコンパイルされていることを確認したい。

答えて

9

次は動作するはずです:

#if !__has_feature(objc_arc) 
# error Compile me with ARC, please! 
#endif 

は、ファイルの先頭にそれを置きます。

+0

ありがとうございます。 – adonoho

-1

完全なファイルの場合は、-fno-objc-arcをコンパイラフラグに追加して、非アークコンパイラを使用することをお勧めします。

マクロを使用して、非アークコンパイラでコードの「パーツ」をコンパイルします。 たとえば、アークコードベースと非アークコードベースの両方で使用され、このマクロブロック内のリリース、deallocを書くフレームワークを作成する場合は、これを使用してください。

+0

Mugunthは現代のXcode、v4.2 +として、プロジェクト内のARCと非ARCコードを混在させることができ、ARCはiOS v4.0に戻ってもアプリケーションをサポートします。マクロルートは避け、ARCにファイルを移動します。私は新しい機能を追加します。キーは、私と私のクライアントのアプリケーションの新しいバージョンが更新されると、この変更が確実に伝播するようにすることです。上記のマクロがこれを行います。あなたのコメント、思考、そして時間をありがとう。アンドリュー – adonoho

関連する問題