1

iOS アプリの Crashlytics でいくつかのクラッシュ ログを取得していますが、それらを解釈する方法に困惑しています。アプリでクラッシュを作成するために考えられるすべてのことを試しましたが、次のようなスタック トレースが発生するクラッシュを作成できませんでした。

Thread : Crashed: com.apple.main-thread
0  libobjc.A.dylib                0x397e6b26 objc_msgSend + 5
1  Foundation                     0x2fcc7f8d -[NSError dealloc] + 60
2  libobjc.A.dylib                0x397f6b0b objc_object::sidetable_release(bool) + 174
3  Foundation                     0x2fd241f5 -[NSFilesystemItemRemoveOperation dealloc] + 60
4  libobjc.A.dylib                0x397f6b0b objc_object::sidetable_release(bool) + 174
5  libobjc.A.dylib                0x397e8007 (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 358
6  CoreFoundation                 0x2f2de981 _CFAutoreleasePoolPop + 16
7  UIKit                          0x31b1624d _wrapRunLoopWithAutoreleasePoolHandler + 36
8  CoreFoundation                 0x2f3761cd __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 20
9  CoreFoundation                 0x2f373b71 __CFRunLoopDoObservers + 284
10 CoreFoundation                 0x2f373eb3 __CFRunLoopRun + 730
11 CoreFoundation                 0x2f2dec27 CFRunLoopRunSpecific + 522
12 CoreFoundation                 0x2f2dea0b CFRunLoopRunInMode + 106
13 GraphicsServices               0x34005283 GSEventRunModal + 138
14 UIKit                          0x31b82049 UIApplicationMain + 1136
15 Pocket Linesman                0x000d5a8b main + 17 (main.m:17)

このスタックトレースの原因を解釈する方法を知っている人はいますか? ファイル システムからアプリ内のオブジェクトを削除しているときに何かが発生しているようですが、100% 確実ではありません。

4

2 に答える 2

3

backtrace で確認できます_CFAutoreleasePoolPop

これは、現在の実行ループの自動解放プールが自動解放用にマークされたオブジェクトを解放しようとしているときにクラッシュが発生したことを意味します...

通常、自動解放されたオブジェクトが手動で解放されたことを意味します。
次のことを想像してください。

{
    NSObject * o;

    o = [ [ [ NSObject alloc ] init ] autorelease ];

    [ o release ];
}

このoオブジェクトの保持カウントは1であり、自動解放用にマークされているため、自動解放プールの現在のインスタンスは、release次にドレインされるときにメッセージを送信します。

そのため、 を手動で呼び出すことreleaseは間違っていますが、オブジェクトがまだ離れているため、クラッシュは発生しません。ただし、オブジェクトは割り当て解除され、自動解放プールには割り当て解除されたオブジェクトへの参照が残ります。

releaseプールが空になると、その無効な参照にメッセージを送信しようとするため、アプリがクラッシュします。

于 2014-01-19T09:25:46.323 に答える
0

内部の割り当てが解除されることで、のNSFilesystemItemRemoveOperation周りで問題のあるメモリ管理を扱っていると思います。コードのどこかでこの呼び出しを行っていますか?NSFileManagerremoveItemAtPath:error:

于 2014-01-19T09:17:35.970 に答える