【发布时间】:2011-01-21 01:31:01
【问题描述】:
我的 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];
这次崩溃让我完全困惑,如果有人能帮助我准确了解它为什么会崩溃以及我将来如何防止它崩溃,我将不胜感激。
提前致谢!
【问题讨论】:
标签: iphone objective-c ios