2

私の iOS アプリには多くのネットワーク機能があります。もちろん、重要なデータはファイルシステムに保存してオフラインで表示するなどしていますが、以前は問題なく完全に動作していました。ここで、機内モードをオンにしてこれをテストして、インターネット接続がないことをシミュレートしようとすると、GDB は次のように出力します。

2011-04-17 21:34:13.291 Bronto Backup Mobile App[195:307] *** -[UIAlertView release]: message sent to deallocated instance 0x3e93630

gdb で malloc デバッグを試しましたが、プロセスが実行されていないか、コマンドが見つからないことがわかります。バグが発生した場所を特定するにはどうすればよいですか? backtrace は、通常の NSAutoreleasePoolPop のものしか提供しませんでした。

私の愛のために、私はこのバグがどこにあるかを追跡することはできません. NSZombiesEnabled はアドレスを教えてくれますが、malloc_history pid 0x3e93630前に情報があっても gdb がこのコマンドを認識していないというエラーが表示されます。

4

2 に答える 2

6

何かが保持不足または過剰にリリースされています。Zombies テンプレートを使用して Instruments でアプリを実行します。これにより、メモリの問題が発生したオブジェクトが表示され、そのオブジェクトの保持/解放の履歴全体が表示されます。それはあなたを正しい方向に向けるはずです。

于 2011-04-18T04:50:24.190 に答える
1

BJホーマーの答えは正しいです。私の答えに賛成しないでください。ここに私が投稿したいくつかの追加情報があります:

https://stackoverflow.com/a/19237139/539149

と言う所がありました。

[viewController release];
viewController = NULL;

これにより release が 2 回呼び出されました (そのため、メモリはすぐに解放されました) が、iOS が所有するオブジェクトが後でメイン スレッドでオブジェクトを参照しようとするまで、ゾンビは明らかになりませんでした。

于 2013-10-08T00:41:58.947 に答える