我的iOS應用程序已與一些用戶崩潰。我能夠回收他們的崩潰日誌並對它們進行符號化。雙釋放會導致崩潰嗎?
幾乎每次崩潰看起來像這樣...
0 libobjc.A.dylib 0x34a80466 objc_msgSend + 18
1 CoreFoundation 0x357e0f74 -[NSObject(NSObject) release] + 24
2 CoreFoundation 0x357e53c2 CFRelease + 62
3 CoreFoundation 0x35825fe6 -[__NSArrayM removeObjectAtIndex:] + 82
4 CoreFoundation 0x358237ae -[NSMutableArray removeAllObjects] + 30
5 [appName] 0x00006396 -[MainView actionSheet:clickedButtonAtIndex:] (MainView.m:790)
正如你可以在2和1,我的數組被釋放兩次看到。第二次發佈後,應用程序發送objc_msgSend和應用程序崩潰。它是否因爲陣列被釋放兩次而崩潰?
而且,我的陣列中創建這樣的:
someArray = [[NSMutableArray alloc] init];
我只是在我的dealloc釋放這個數組是這樣的:
- (void)dealloc {
[someArray release];
}
至於結果,我只能釋放一次,在我dealloc,它怎麼會因爲被釋放兩次而崩潰?
最後,關於這個崩潰的另一個奇怪的是它只是有時會發生,這是不相符的。正如您在崩潰日誌的第5行中看到的那樣,按下了一個操作表按鈕。只有一個上按執行行:
[someArray removeAllObjects];
這個崩潰已經讓我完全摸不着頭腦,我將不勝感激,如果有人可以幫助我準確理解爲什麼它的崩潰,我怎麼能阻止它的崩潰未來。
在此先感謝!