gpt4 book ai didi

iphone - 双重释放会导致崩溃吗?

转载 作者:行者123 更新时间:2023-11-29 11:24:02 25 4
gpt4 key购买 nike

我的 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];

这次崩溃让我完全困惑,如果有人能帮助我准确理解它崩溃的原因以及我如何防止它在未来崩溃,我将不胜感激。

提前致谢!

最佳答案

它看起来确实像一个双释放,但它可能是数组中的对象之一,而不是数组本身。要追踪它,请在 Xcode 的 Zombies Instrument 下运行您的应用程序。最好在模拟器中执行此操作,因为这会占用大量内存。现在,当您重现崩溃时,您会发现有问题的对象是哪个类。您还可以跟踪它的保留/发布历史记录,以找出您在哪里破坏了它。

关于iphone - 双重释放会导致崩溃吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4754563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com