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                  0x01235b8d _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                  0x01238cc9 __CFRunLoopRun + 1817
9   CoreFoundation                  0x01238240 CFRunLoopRunSpecific + 208
10  CoreFoundation                  0x01238161 CFRunLoopRunInMode + 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

これは、オブジェクトが過剰に解放されているためです。自動解放プールがオブジェクトを解放しようとする前に、オブジェクトが解放されていると考えるのは正しいですか。したがって、自動解放プールはオブジェクトを過剰解放しようとしますか?

4

2 に答える 2

13

あなたの評価は正しいです。シミュレーターの「Zombies」インスツルメントを使用してアプリを実行するか、NSZombieEnabled環境変数をYESに設定してみてください。これらは両方とも、どのオブジェクトがオーバーリリースされているかについてのより多くの情報を提供します。

于 2011-01-17T11:38:20.707 に答える
0

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

于 2011-01-17T13:08:38.190 に答える