我遇到了一个奇怪的问题。我可以很好地访问我的类单例实例,但如果我尝试再次访问它,它似乎会挂起。这是代码的简单版本:
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
它本身,但它发生在其他地方。
代码永远不会到达test 2
。一旦访问MyManager.sharedInstance
它挂了。没有错误或警告。
如果我暂停调试器,我可以看到它当前正在运行semaphore_wait_trap
图片(区别类名):
重新启动 Xcode 或计算机没有帮助。
创建 MyManager 时,会使用锁来防止其他线程在创建变量时访问该变量。您无法从 init 方法中访问此变量。它不只是seem要挂起您的程序,它每次都会挂起您的程序,因为您正在创建死锁。
解决方案:不要在 init 方法中使用该变量。不要直接或间接从 init 方法访问 _SharedInstance。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)