los*_*its 1 grand-central-dispatch ios swift
我已经阅读了这个答案,我不相信它有我想要的东西,但我是初学者,我很高兴有人在这个链接中指出答案:dispatch_after - 迅捷的GCD?
我的目标:设置一个功能,每天在用户的时区(或系统的时区)上午9点运行.
我已经非常简单地使用GCD来延迟一个函数如下(它工作得非常好):
var dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(10 * Double(NSEC_PER_SEC)))
dispatch_after(dispatchTime, dispatch_get_main_queue(), {
let alert = UIAlertView()
alert.title = "Foo Alert"
alert.message = "foo."
alert.addButtonWithTitle("OK")
alert.show()
AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
});
Run Code Online (Sandbox Code Playgroud)
所以我想像我上面提到的那样每天开火,但是我坚持的第一件事是将DISPATCH_TIME_NOW换成时区相关值?我是否甚至需要考虑时区或者只是用军队09:00替换DISPATCH_TIME_NOW就足够了?
此外,任何关于总体目标的建议,每天同一时间安排起火功能都将非常感激.
我也没有结婚使用GCD这个目标,但它是我遇到最多的搜索.
简而言之,除非应用程序仍在运行,否则通常无法在任意时间执行某些任意功能.在dispatch_after该应用程序仍然是在计划的时间,这通常不保证运行的假定.这dispatch_after对于"在x秒内做某事"非常有用,而不是"明天早上9点做某事".
是的,dispatch_after可以在某些后台线程上执行某些任务,但这与使应用程序在后台运行(即,当应用程序本身不再处于前台时)的概念截然不同.请参阅iOS应用程序编程指南:后台执行,它列举了所有各种后台机制.
当应用程序当前不活动时执行某些操作的关键技术包括:
使用后台提取,您可以机会性地检查服务器上的新数据(但不是根据您的日程安排,而是由操作系统决定).
如果您的应用程序正在提供几个非常具体的任务(例如音乐应用程序,VOIP,导航应用程序等),您可以注册后台操作.
您可以安排在特定时间触发本地通知(尽管用户有责任查看通知并点击该通知以便应用程序运行).有关更多信息,请参阅" 本地和远程通知编程指南".
您可以注册推送通知,然后您的服务器可以在您选择的某个时间向客户端发送通知(但这需要服务器端开发).
还可以配置其他后台任务(例如,在后台继续网络请求,请求几分钟完成一些有限长度的任务,即使应用程序不再处于活动状态等),但这些似乎与您的问题无关.
如果您可以在预定时间阐明您希望应用程序执行的操作,我们可能会建议可能的内容和替代方案.但是,在广泛的笔触中,这些是您拥有的基本选项.