iOS   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了objective-c – 使用Swift访问类单例时的semaphore_wait_trap大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我遇到了一个奇怪的问题.我可以很好地访问我的类单例实例,但是如果我再次尝试访问它,它就会挂起.这是代码的简单版本: private let _SharedInstance = Mymanager() class Mymanager: NSObject { class var sharedInstance: Mymanager { return _SharedInstan
我遇到了一个奇怪的问题.我可以很好地访问我的类单例实例,但是如果我再次尝试访问它,它就会挂起.这是代码的简单版本:

private let _SharedInstance = Mymanager()

class Mymanager: NSObject {

    class var sharedInstance: Mymanager {
        return _SharedInstance
    }

    override init() {
        super.init()

        println("init")

        println(self.accessToken())
        println(Mymanager)
        println("test 1")
        println(Mymanager.sharedInstancE)
        println("test 2")
    }

}

在这种情况下,它从init本身调用它,但它发生在其他地方.

代码永远不会进行测试2.只要它访问Mymanager.sharedInstance就会挂起.没有错误或警告.

如果我暂停调试器,我可以看到它当前在semaphore_wait_trap上

图片(差异类名称):

重新启动Xcode或计算机没有帮助.

解决方法

创建Mymanager时,会使用锁定来阻止其他线程在创建变量时访问该变量.您无法从init方法中访问此变量.它不仅会挂起您的程序,它会每次都挂起您的程序,因为您正在创建一个死锁.

解决方案:不要在init方法中使用该变量.不要直接或间接地从init方法访问_SharedInstance.

大佬总结

以上是大佬教程为你收集整理的objective-c – 使用Swift访问类单例时的semaphore_wait_trap全部内容,希望文章能够帮你解决objective-c – 使用Swift访问类单例时的semaphore_wait_trap所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。