2011-01-17 19 views
3

私の自動解放プールが私のアプリケーションをランダムにクラッシュさせていますが、この問題の一般的な原因は何ですか?自動解放プールがクラッシュするアプリケーション

Thread 0 Crashed: Dispatch queue: com.apple.main-thread 
0 libobjc.A.dylib     0x0145ba63 objc_msgSend + 23 
1 CoreFoundation     0x01210a6c CFRelease + 92 
2 CoreFoundation     0x012f2e8a -[__NSArrayM dealloc] + 170 
3 CoreFoundation     0x01210a6c CFRelease + 92 
4 CoreFoundation     0xb8d _CFAutoreleasePoolPop + 237 
5 Foundation      0x0005886c __NSFireDelayedPerform + 559 
6 CoreFoundation     0x012dafe3 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 19 
7 CoreFoundation     0x012dc594 __CFRunLoopDoTimer + 1220 
8 CoreFoundation     0xcc9 __CFRunLoopRun + 1817 
9 CoreFoundation     0xCFRunLoopRunSpecific + 208 
10 CoreFoundation     0xCFRunLoopRunInMode + 97 
11 GraphicsServices    0x01c2e268 GSEventRunModal + 217 
12 GraphicsServices    0x01c2e32d GSEventRun + 115 
13 UIKit       0x002e842e UIApplicationMain + 1160 
14 FancyAPint      0x000029e8 main + 102 (main.m:14) 
15 FancyAPint      0x00002979 start + 53 

私は、オブジェクトが解放の上にされているため、これは知っている私は、自動解放プールは、それを解放しようとしている前にリリースされたオブジェクト思考に修正しています。したがって、自動解放プールはオブジェクトを解放しようとしますか?

答えて

12

あなたの評価は正しいです。シミュレータの "ゾンビ"を使用してアプリケーションを実行するか、NSZombieEnabled環境変数をYESに設定してみてください。これらは両方とも、あなたにどのオブジェクトが過剰解放されているかについてより多くの情報を与えるでしょう。

+1

NSZombieの組み合わせを使用してクラッシュログを調べると、問題が見つけられました。オブジェクトは自動解放プールで解放されたクラスdeallocで解放されています。 – Alex

0

これは余分なメモリリリースが原因です。自動解放プール内に割り当てられているオブジェクトを解放しないでください。また、自身のメモリを持つオブジェクトから挿入されます。私はこの問題に直面したので、これはこの背後にある理由の一つかもしれません。