我有一个仅在当前不执行时才想执行的功能。我已经使用了bool变量来检查当前执行情况。
Swift是否提供了其他解决方案来代替使用Bool来处理此问题?
guard
!isExecuting,
let currentNavVC = tabBarController.selectedViewController as? UINavigationController
else { return }
isExecuting = true
let first = currentNavVC.viewControllers.first,
let last = currentNavVC.viewControllers.last
var controllers = [first]
if first != last {
controllers = [first, last]
}
DispatchQueue.main.async {
currentNavVC.viewControllers = controllers
isExecuting = false
}
Bool变量:isExecuting
尝试使用信号量(DispatchSemaphore),但它们没有帮助。我也在didReceiveMemoryWarning()中调用上述函数任何帮助将不胜感激,并预先感谢!
我有一个仅在当前不执行时才想执行的功能
您正在寻找一个锁。但是锁本身是棘手且危险的。获得锁的简单,安全的方法是使用串行队列。正如我们所说,串行队列是一种锁定形式。因此:
如果在主队列上调用了函数,则如果当前正在执行,则它无法执行,并且没有任何事要做。主队列是一个串行队列,只能有一个。
如果在后台队列上调用您的函数,请确保您的队列是串行队列。例如,如果您创建自己的DispatchQueue,则默认情况下它是串行的。