39

-retainXcode 4.2 で自動参照カウントを使用してアプリケーションをビルドしているときに、、、-releaseおよびを使用しようとすると-dealloc、次のようなエラーが発生します。

自動参照カウントは、「dealloc」の明示的なメッセージ送信を禁止します

このエラーが表示されるのはなぜですか? -retain-release、およびは、-dealloc自動参照カウントでは許可されなくなりましたか?

4

4 に答える 4

67

基本的:

ARC を使用する場合は、オール オア ナッシングです。コンパイラがすべての保持/解放/割り当て解除を管理しているか、何もしていません。コンパイラがすべて自分で実行したいため、それらへの独自の呼び出しを散在させることはできません。これを行うと、ばかげた最適化が行われる可能性があります (たとえば、手動メモリ管理で自動解放されたオブジェクトを返したメソッドは、自動解放プールに決して収まらないオブジェクトを生成する可能性があります)。独自の呼び出しで保持と解放を散りばめ始めると、コンパイラはこれらを処理する必要があり、必要な (そして必要な) 最適化の多くを実行できなくなります。

さらにおまけとして、呼び出す-retainCountとコンパイラ エラーが発生するようになりました。ああ、ハッピーデー!

于 2011-06-20T21:53:12.713 に答える
1

AliSoftware への対応: 私たちの CNA は、ARTC フレームワークと非 ARC フレームワーク、およびアーク ソースと非 ARC ソースを混在させます。

(やったよ..)

基本的な考え方は次のとおりです: 1) コンパイラは非常に優れたココア プログラマができるように呼び出しを挿入/削除します 2) ココアは ANYWAY C コードなので、個別のコンパイルがあるため、リンカは複数のソースによって生成されたバイナリをリンクできます。asm と cocoa、または C と pascal を混在させることができると考えてください...

主な意見では、C# / Java に対する Appleadvantage はここにあります: 常に混在させることができ、ランタイムではなく COMPILER テクニックを使用して..) パフォーマンスを急ぐことができます。

于 2012-02-04T20:44:11.527 に答える
1

自動参照カウントでは、retain、release、および dealloc は許可されていません。

既存のコードがある場合は、任意のファイルで ARC を選択的に無効にできる -fno-objc-arc を使用してそのまま使用できます。

複数のファイルで ARC を無効にする場合:

Xcode の Target/Build Phases/Compile Sources で目的のファイルを選択し、ENTER キーを押します。(ダブルクリックすると 1 つのファイルのみが選択されます) -fno-objc-arc と入力して、Enter または Done を押します。

于 2014-12-01T07:07:23.730 に答える
0

Xcodeに関する私の回答で指摘したように、特定のソース ファイルを non- としてコンパイルできます。Dave DeLongの答えは少しずれています。ソースを非有効プロジェクトとしてコンパイルするようにコンパイラに指示できるという事実は含まれていません(ここで説明されているように)。ARCARCARCARC

于 2016-04-17T01:31:44.807 に答える