我可以避免将NSObject子类化为重复调用方法吗?

时间:2015-01-13 11:46:17

标签: swift

我正在尝试实现一个纯粹的swift类。其中一个类方法需要每60秒调用一次。在Objective-C中,我会使用NSTimer,但是如果没有NSObject子类,我希望它是纯Swift。

所以我想做这样的事情:

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我唯一可行的选择吗?

1 个答案:

答案 0 :(得分:1)

您的代码不会导致堆栈溢出,因为只有dispatch_after() 调度该块以供以后执行,然后返回。

您的解决方案的一个可能的缺点是它每次启动一个新的计时器 60秒定时器不是100%精确,因此可能会积累很小的差异。

更好的解决方案(如果您想避免使用NSTimer)将使用调度 计时器,如this answer中所述 到Do something every x minutes in Swift