下面是我的原始代码:
var checkUnauthorizedToken: dispatch_once_t = 0
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
dispatch_once(&checkUnauthorizedToken) {
if self.unauthorized {
self.performSelector(#selector(self.displayUnauthorizedMessage), withObject: nil, afterDelay: 0.5)
}
}
}
由于
dispatch_once
已被删除,我想我可以安全地调用选择器而不使用它吗?例如:override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
if self.unauthorized {
self.performSelector(#selector(self.displayUnauthorizedMessage), withObject: nil, afterDelay: 0.5)
}
}
这样对吗?
最佳答案
好吧,这不是一回事。我不确定您的确切意图是什么,但我认为您做的太过分了。dispatch_once
可以确保即使多个线程正在调用一个函数,该代码也只能执行一次,并且通常用于初始化函数中的变量,而该函数经常被调用,并且可能来自其他线程。
由于viewDidAppear
将始终在主线程中调用,并且您只想在首次访问该视图时显示未经授权的视图,因此建议您做一个简单的实例bool变量unauthorizedMessageShown
,在首次访问时将其设置为true并在函数中进行检查。
关于ios - dispatch_once转换Swift 3,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39725463/