objective-c – 使用Swift访问类单例时的semaphore_wait_trap
发布时间:2020-12-14 18:03:54 所属栏目:百科 来源:网络整理
导读:我遇到了一个奇怪的问题.我可以很好地访问我的类单例实例,但是如果我再次尝试访问它,它就会挂起.这是代码的简单版本: private let _SharedInstance = MyManager()class MyManager: NSObject { class var sharedInstance: MyManager { return _SharedInstanc
我遇到了一个奇怪的问题.我可以很好地访问我的类单例实例,但是如果我再次尝试访问它,它就会挂起.这是代码的简单版本:
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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |