1

さて、プロジェクトにサードパーティのコードを追加しようとするまで、プロジェクトで ARC を喜んで使用してきました。フォルダーをドラッグしました(プロジェクトファイルではなく、ビューコントローラーのソースファイルだけです)。サード パーティのコードは ARC ではなかったので、[編集] -> [リファクタリング] -> [Objective-C ARCに変換] を選択し、サード パーティ アプリからのファイルのみを選択して ARC に変換しました。すべてが順調に進みましたが、以前に動作していたコードで次の警告が表示され始めました。

TTKSoundGenerator.m:94:10: warning: '__bridge' casts have no effect when not using ARC [-Warc-bridge-casts-disallowed-in-nonarc]
        (__bridge CFStringRef)soundFile,
         ^~~~~~~~
1 warning generated.

これは、何かがおかしいという最初の手がかりです。先に進んでビルドして実行すると、まだ参照されている間に何かがリリースされる場所でアプリがクラッシュすることを確認します。そのため、プロジェクト ファイルでObjective-C の自動参照カウントがYESに設定されているにもかかわらず、ARC はまったく機能していません。

私は戻って、プロジェクト内のすべてのファイルでEdit->Refactor->Convert To Objective-C ARCを実行しましたが、これを修正することはできませんでした。そのため、現在、プロジェクトは ARC の辺境で立ち往生しています。リファクタリングを実行するときにファイルの選択を解除すると、何らかの形で Xcode に「No ARC」の特別なケースをそれらのファイルに追加するように指示されたようです。これを修正またはさらに診断する方法についてのアイデアはありますか?

4

3 に答える 3

2

サード パーツ ライブラリを ARC に変換する必要はありません。同じプロジェクトに ARC コードと非 ARC コードの両方を含めることができます。第 3 部のライブラリは ARC として記述されていないため、そのまま使用するだけで多くの余分な作業を節約できます。(特に更新が必要な場合)

プロジェクトで使用することにした場合、3rd part lib は ARC なしで正しく記述されていると想定するのが妥当だと思います。

これを参照してください:

ARC 以外のプロジェクト コードと ARC プロジェクト コードを組み合わせることができますか?

于 2012-08-17T09:02:11.033 に答える
1

プロジェクトでEdit->Refactor->Convert To Objective-C ARCを実行し、変換するファイルの一部のみを選択すると、Xcode は残りを No ARC としてマークします。Edit->Refactor->Convert To Objective-C ARCをすべてのファイルに対して再度実行しても、そのオプションが設定されると、それ以上の効果はありません。修正するには、プロジェクト設定に移動し、Build Phases->Compile Sourcesの下で、ARC を再度有効にするファイルを選択し、リファクタリングによって追加された -fno-objc-arc コンパイラ フラグを削除します。

于 2012-08-17T13:06:15.267 に答える
0

ACR 変換ツールは非常に強力で非常に便利ですが、多くの場合、自分が考えているのとは正反対の方法で使用する必要があります。

ARC プロジェクトがあり、ARC に準拠していないクラスを追加した場合。次の 2 つの選択肢があります。

1) mark the file as not using ARC (recommended for 3rd party classes)
2) convert the file to use ARC

ARC 変換ツールは、これらのタスクのいずれかを実行できるため、f-no-whatsit の構文と手動でフラグを設定する場所を覚えておく必要がありません。

ケース 1) ツールを実行し、非 ARC クラスを除くすべてのファイルにチェックマークを付けます。ARC 変換ツールは、すでに ARC に準拠しているファイルには何もしません。また、チェックされていないファイルには -fno-objc-arc フラグが追加されます。

ケース 2) ツールを実行し、新しいクラスを含むすべてのファイルにチェックマークを付けます。ARC 変換ツールは、このファイルのみを ARC に変換し、他のファイルはそのままにします。

直観的には、ファイルが既に ARC である場合、チェックを外したままにしておくべきだと思いますが、実際には、これを行うと、ARC 変換ツールがそれらのファイルに -fno-objc-arc フラグを付けます。

于 2012-11-24T11:48:41.343 に答える