1

Xcode の変換ツール ( ) を初めて使用して、古いプロジェクトを再訪して ARC に変換してEdit -> Refactor -> Convert to Objective-C ARC...いますが、実際の問題なのか、何らかの理由でニシンなのかよくわからないことがいくつかあります。

予想どおり、ツールが完了するのを妨げるものの大きなリストが表示されますが、次のとおりです。

  1. 保持/解放/自動解放の多くの (すべて?) インスタンスは、エラーとしてフラグが立てられているように見えます。私は本当にこれらすべてを自分で取り除くことになっていますか? それがツールの機能だと思いました。

  2. 私のクラスの多くで、ARC とは関係のないファントム解析/ビルド エラーのように見える一連のエラーが見られます。たとえば、ARC 関連の問題がないように見える単純なクラスでは、任意のメソッドの実装で「宣言されていない識別子」が表示され、ファイルの最後に「解析エラー: 予想される }」が大量に表示されます。これらは実際のものではありません。プロジェクトは正常にビルドされますが、エラーの原因や解決策は見当たりません。

リストには「実際の」問題もあります (コードで明示的に明確にする必要があるブリッジングの問題が予想されます) が、上記の種類のランダム エラーが非常に多いため、ノイズの中で信号を見つけることさえ困難です。これは私には間違っているようです。

このツールが実際に行っていることを誤解していますか? Apple のドキュメントには次のように書かれています。

Xcode は、ARC 変換の機械的部分 (retain および release 呼び出しの削除など) を自動化し、移行ツールが自動的に処理できない問題を修正するのに役立つツールを提供します。

ありがとう。

4

2 に答える 2

0
  1. ツールはそれらを取り除くことはありませんが、コンパイル時に必要に応じて保持/解放コードを追加するだけです。
  2. これらの問題は、古い参照カウントコードを削除すると解消される可能性があります。

編集:詳細な説明:

Xcode 4.2では、入力時の構文チェックに加えて、新しいApple LLVMコンパイラーにより、手動のメモリー管理の負担をコンパイラーにオフロードし、コードをイントロスペクトしてオブジェクトをリリースするタイミングを決定できます。Appleのドキュメントでは、ARCについて次のように説明しています。

「自動参照カウント(ARC)は、Cocoaアプリケーションでオブジェクトの有効期間を管理するプロセス(メモリ管理)を簡素化するコンパイラレベルの機能です。」</ p>

言い換えると、ARCはコードから参照カウントを「削除」するのではなく、内部で独自に実行します。release入力するretain必要はもうありませんdealloc。ARCが機能する必要があることの1つは、完全にそれ自体で参照カウントを実行することです(「邪魔になる」ためのユーザー参照カウントはありません)。

于 2012-10-08T06:30:18.270 に答える
0

解決には長い時間がかかりましたが、これらの問題は両方とも、私が使用していたカスタム マクロに起因しているように見えました。次のように、頻繁に使用していた release-and-set-to-nil のマクロがありました。

#define RELEASENIL(x)   [(x) release]; \
                        (x) = nil;

理由はまだわかりませんが、何らかの理由で、ARC 変換ツールはこれをうまく処理できず、リリース警告と解析エラーをスローして窒息しました。(プリプロセッサとの何らかの相互作用?) マクロを変更してリリース行を削除すると、変換は期待どおりに進みました。

もちろん、メッセージは削除されます。(私は、他の誰かがこの問題を抱えている可能性を考えて、自分の質問に答えています。)

于 2012-10-11T15:38:25.507 に答える