Swift:了解 NSLock 死锁

标签 swift nslock

使用 NSLock 在我们的日志中看到这条消息:

*** -[NSLock lock]: deadlock (<NSLock: 0x6100000cbec0> '(null)')
*** Break on _NSLockError() to debug.

这是否意味着应用程序遇到了 fatal error 并将停止工作?或者这是以某种“优雅”的方式处理的?

最佳答案

根据定义,死锁意味着有问题的线程无法继续进行。 Swift 不会“处理”死锁,而只是通知您发生了这种情况。

此死锁如何在您的应用程序中表现出来取决于与该线程关联的代码在做什么。但是,显然,无论它是什么,它都永远不会完成,并且永远不会恢复该线程的资源。如果这个死锁发生在主线程上,应用程序将卡住。

最重要的是,此消息的目的不是告诉您死锁已得到处理,而是相反,告诉您它无法处理,因此,您有责任修复消除这个问题的代码。

关于Swift:了解 NSLock 死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40064580/

相关文章:

ios - 连续推送 ViewController 时缺少导航或后退按钮的标题

ios - 保护对 NSManaged 对象数组的读/写访问

iphone - iOS——尝试设置锁字典

iphone - IOS SDK - NSLock 消息 : "unlocked from thread which did not lock it"

ios - 如何将 userdefault 值转换为 URL?

ios - 更改自定义单元格内容 View 颜色

objective-c - 没有正确使用 NSLock,但似乎仍然有效

multithreading - 在 Cocoa 中从不同线程锁定和解锁信号量

arrays - UInt8 数组到 Swift 中的字符串

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?