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

标签 swift

我正在尝试实现一个纯 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/

相关文章:

ios - 无法在 iPhone 6 中安装我的 ARKit 支持的应用程序,但苹果的演示应用程序在同一部 iPhone 上成功运行

swift - 将 NSCalendar 符号与数字常量相关联

ios - Moya/Alamofire 请求变量问题

ios - NMANavigationManagerDelegate 在 HERE Map iOS SDK 中不起作用

ios - 在自定义 Sirikit 中访问用户当前位置打算,iOS,swift

ios - Swift:关于 presentScene() 的安全实践

ios - PFFile 中的图像将被上传以进行解析,而不是保存到本地数据存储中

ios - 通过添加观察者检查整个应用程序的互联网连接

ios - 如何在 Swift 中访问特定 GameViewController 实例的变量值

swift - 如何在现有 UIKit 类(如 UIColor)的扩展中添加初始值设定项?