1

既存の非ARCプロジェクトをARCに移動しようとしています。ビルド設定のObjective-C自動参照カウントフラグをYESに設定しました。

もちろん、これにより、明示的なリリース/自動リリースメッセージの送信に関して多くのエラーが発生しました。コードに含まれていたエラーについては、明示的なリリースメッセージ、deallocブロックなどを削除しました。サードパーティライブラリ(ASIHTTPRequestなど)で生成されたエラーについては、ビルドフェーズ-ソースのコンパイルで必要なファイルに-fno-objc-arcフラグを追加しました。セクション。

ただし、すべてのエラーを修正した後(そしてプロジェクトが正常にコンパイルされた後)、コードにリリースステートメントが残っています。

たとえば、アプリデリゲートでは、次を使用します。

self.loginViewController       = [[LoginViewController alloc] init];
self.window.rootViewController = self.loginViewController;
[self.window makeKeyAndVisible];
[self.loginViewController release];

私が理解しているように、これはエラーを引き起こしたはずです。しかし、そうではありません。アプリは意図したとおりに動作しますが、これらのファイルでメモリ管理が適切に行われているかどうかについて疑問が残ります。

AppDelegate.mもLoginViewController.mも-fno-objc-arcフラグが設定されていないため、デフォルトでARCに設定する必要があります。

間違いなく私は何か間違ったことをしている。何を再確認する必要がありますか?

前もって感謝します。

4

1 に答える 1

1

この問題を解決しました。私はiRateライブラリを使用していましたが、そのヘッダーの1つで、リリースと自動リリースを定義しています。

#define release self
#define autorelease self

それらの行を削除し、問題を修正しました。したがって、このような問題が発生した場合は、サードパーティのライブラリで定義されているかどうかを確認してください。

真剣に、どのまともなプログラマーがこのように「リリース」と「自動リリース」を定義するでしょうか?すばらしい...

于 2012-10-28T01:12:24.173 に答える