使用以下命令在我们的日志中看到此消息NSLock
:
*** -[NSLock lock]: deadlock (<NSLock: 0x6100000cbec0> '(null)')
*** Break on _NSLockError() to debug.
这是否意味着应用程序遇到了致命错误并将停止工作?或者这是以某种“优雅”的方式处理的?
根据定义,死锁意味着有问题的线程无法继续。Swift 不会“处理”死锁,而只是通知您发生了这种情况。
这种死锁如何在您的应用程序中表现出来取决于与该线程关联的代码正在做什么。但是,显然,无论它是什么,它都永远不会完成,并且该线程的资源永远不会被恢复。如果这个死锁发生在主线程上,应用程序将冻结。
底线,此消息的目的不是告诉您死锁已被处理,而是相反,告诉您它无法处理,因此,您有责任将代码修复为消除这个问题。
Swift 与这里的行为无关。这不是崩溃。请注意,锁不是可重入锁,因此lock
在您已经拥有锁时调用会导致死锁。如果主线程死锁,应用程序会出现卡顿,或者一个或多个线程在后台死锁,导致未定义的行为,如数据未到达、任务未处理等。