使用 NSLock
在我们的日志中看到这条消息:
*** -[NSLock lock]: deadlock (<NSLock: 0x6100000cbec0> '(null)')
*** Break on _NSLockError() to debug.
这是否意味着应用程序遇到了 fatal error 并将停止工作?或者这是以某种“优雅”的方式处理的?
最佳答案
根据定义,死锁意味着有问题的线程无法继续进行。 Swift 不会“处理”死锁,而只是通知您发生了这种情况。
此死锁如何在您的应用程序中表现出来取决于与该线程关联的代码在做什么。但是,显然,无论它是什么,它都永远不会完成,并且永远不会恢复该线程的资源。如果这个死锁发生在主线程上,应用程序将卡住。
最重要的是,此消息的目的不是告诉您死锁已得到处理,而是相反,告诉您它无法处理,因此,您有责任修复消除这个问题的代码。
关于Swift:了解 NSLock 死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40064580/