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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)