下面是我的原始代码:

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/

10-08 20:56