0

私は最初の iPhone アプリの開発に少しずつ取り組んでおり、exc_bad_access に何度も遭遇しています。(これは、まだ MVC に適した方法で設計していないためだと思います。)

これらのエラーが常に発生する理由を突き止めようとするのは非常にイライラします... xcode デバッガーでポインターの監視リストを保持する方法があるので、さまざまなオブジェクトがいつ解放されるかを実際に確認できますか? 私のプログラム設計に欠陥がある理由をより視覚的に理解できるものはありますか?

特に、NSURLConnection メソッドをすべてラップした「webobject」クラスで問題が発生し続けています。 Web オブジェクトの合成プロパティにアクセスします。Web サービス関連のすべてのメソッドを、どこにでもインポートできるクラスにラップする必要があるという私の考えに根本的な問題がありますか?

4

4 に答える 4

1

デイブ、

オブジェクト (特に NSStrings のようなネイティブ オブジェクト) の割り当て解除を追跡する方法がわかりません。しかし、Objective-C プログラミングを開始したときに、同様の大量の exc_bad_access メッセージを経験しました。しかし、ある日、これらのメッセージを取り除くのに大いに役立ったものを読みました。

alloc、copy、または new で始まるメソッドを使用してオブジェクトを作成する場合、それは管理および解放するオブジェクトです。保持と解放を呼び出すことができ、そのサイクルはそれらのオブジェクトで期待どおりに機能します。release または dealloc を呼び出さないと、永遠にハングアップし、リークになります。'stringWithFormat', numberWithYadaYada のようなメソッドを呼び出すと、そのオブジェクトは autorelease に設定されます。つまり、それを使用しているメソッドを終了するとすぐに、割り当てが解除される可能性があります。したがって、これらの autorelease メソッドのいずれかを呼び出した場合は、後で表示する場合に備えて保持する必要があります。

デリゲートまたは NSURLConnection のいずれかが自動解放されていると思われます。これが、不適切なアクセス メッセージの原因です。

ジャック

于 2009-08-09T13:02:21.890 に答える
1

最終的に NSZombieEnabled について読んだところ、exc_bad_access メッセージを追跡するのに役立ちました。詳細はこちら: http://www.cocoadev.com/index.pl?NSZombieEnabled

于 2009-08-20T01:59:34.190 に答える
1

ブレークポイントの作成を試みることができます-[NSObject dealloc](または、対象のサブクラスの同じメソッド)。

また、多くの Cocoa メモリ処理チュートリアルの 1 つも紹介します。

于 2009-08-09T13:08:56.027 に答える
0

一般的なこととして、静的アナライザーとして実行する必要があります。おそらく、オブジェクトの保持が過剰または不足している場合に通知されます。

関連するスタックオーバーフローの質問

于 2009-08-10T01:53:53.390 に答える