gpt4 book ai didi

objective-c - NSRunloop runUntilDate导致应用崩溃

转载 作者:太空狗 更新时间:2023-10-30 03:59:40 25 4
gpt4 key购买 nike

我有一个应用程序可以在 Snow Leopard 服务器上运行数天和数周。它使用 -[NSRunLoop runUntilDate:] 来“暂停”十秒钟,执行它的任务然后再次暂停。运行一个多小时后,我的应用程序崩溃并显示以下报告:

崩溃报告

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000013
Crashed Thread: 0 Dispatch queue: com.apple.main-thread

Application Specific Information:
objc_msgSend() selector name: release

Thread 0 Crashed: Dispatch queue: com.apple.main-thread
0 libobjc.A.dylib 0x00007fff84cfef0c objc_msgSend + 40
1 com.apple.CoreFoundation 0x00007fff84e363d1 __CFRunLoopDoSources0 + 1361
2 com.apple.CoreFoundation 0x00007fff84e345c9 __CFRunLoopRun + 873
3 com.apple.CoreFoundation 0x00007fff84e33d8f CFRunLoopRunSpecific + 575
4 com.apple.Foundation 0x00007fff83e73b74 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 270
5 com.apple.Foundation 0x00007fff83ebf19a -[NSRunLoop(NSRunLoop) runUntilDate:] + 78

乍一看,我认为我的 NSRunLoop 对象不再有效,因此 CF 深处的 release 消息导致崩溃。但是,我认为情况并非如此我在前面的行中获取了对 currentRunLoop 对象的引用。

崩溃时间在 1 到 1.5 小时之间变化,但我无法了解导致崩溃的原因。任何评论或意见或调试想法将不胜感激,因为我不确定下一步该做什么。

编辑:问题解决 - 请在下面查看我的回答

最佳答案

进一步的测试使我能够回答我自己的问题:

运行循环没有任何问题。运行循环负责处理自动释放池中的对象释放,这就是为什么代码的任何部分出现的问题都可能与运行循环相关。

在我的例子中,我有一个没有正确清理的对象。在正常情况下,此问题会在内存泄漏测试期间出现。然而,这个特殊问题只出现在实际的客户端安装中,当 SMTP 服务器返回意外错误消息导致对象被“遗留”时,当运行循环最终试图清理它时,它突然停止了。

简短的回答

运行循环中的崩溃可能由代码中的任何对象引起。尝试重新创建问题场景并测试内存泄漏以找到违规者。

关于objective-c - NSRunloop runUntilDate导致应用崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7815353/

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