我正在尝试实现一个纯 swift 类。其中一个类方法需要每 60 秒调用一次。在 Objective-C 中,我会使用 NSTimer,但是如果可以的话,我希望它是纯 Swift 而无需 NSObject 子类。
所以我正在考虑做这样的事情:
func autoDelete() {
.... code here
// call myself in 60 seconds
delay(60, { () -> () in
self.autoDelete()
})
}
func delay(delay:Double, closure:()->()) {
dispatch_after(
dispatch_time(
DISPATCH_TIME_NOW,
Int64(delay * Double(NSEC_PER_SEC))
),
dispatch_get_main_queue(), closure)
}
我担心的是,因为这是一种递归调用,所以它最终会溢出堆栈。这会发生吗?我有什么选择?继承 NSObject 并使用 NSTimer 是我唯一可行的选择吗?
最佳答案
您的代码不会导致堆栈溢出,因为 dispatch_after()
仅
分派(dispatch) block 供以后执行,然后返回。
您的解决方案的一个可能缺点是它每隔 60 秒。计时器并非 100% 精确,因此微小的差异可能会累积。
更好的解决方案(如果您想避免 NSTimer
)是使用 dispatch
计时器,如this answer 中所述
至 Do something every x minutes in Swift .
关于swift - 我可以避免子类化 NSObject 以重复调用方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27921418/