rdo*_*gan 4 xcode objective-c swift
我遇到了一个奇怪的问题.我可以很好地访问我的类单例实例,但是如果我再次尝试访问它,它就会挂起.这是代码的简单版本:
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")
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它从内部调用它init,但它发生在其他地方.
代码永远不会到达test 2.一旦它访问MyManager.sharedInstance它挂起.没有错误或警告.
如果我暂停调试器,我可以看到它当前正在运行 semaphore_wait_trap
图片(差异类名称):

重新启动Xcode或计算机没有帮助.
创建MyManager时,会使用锁定来阻止其他线程在创建变量时访问该变量.您无法从init方法中访问此变量.它不只是似乎挂在你的程序,它会每一次挂你的计划,因为你正在创建一个僵局.
解决方案:不要在init方法中使用该变量.不要直接或间接地从init方法访问_SharedInstance.
| 归档时间: |
|
| 查看次数: |
1856 次 |
| 最近记录: |