如何在 iOS 中的特定时间运行函数?
Posted
技术标签:
【中文标题】如何在 iOS 中的特定时间运行函数?【英文标题】:How to run a function at a specific time in iOS? 【发布时间】:2014-10-23 15:45:16 【问题描述】:我想在特定时间在我的应用中运行一个函数。在下午 5 点,我希望我的应用显示一个简单的 alertView,告诉用户现在是下午 5 点。
可以安全地假设该应用当时处于活动状态并处于打开状态。我知道如何在延迟后运行函数(但这取决于第一次调用该方法的时间)。
一种方法可能是发送本地通知。这是最好的方法吗?我希望避免使用它,因为它取决于用户授予发送通知的权限。
【问题讨论】:
你能假设用户会一直打开应用程序吗?如果用户可能会关闭应用程序,我认为您将不得不使用通知 用户可以在安排通知和重新打开应用之间关闭应用。所以是的,这就是我考虑通知的原因。 【参考方案1】:如果“假设应用程序在那个时候处于活动状态并打开是安全的”——尽管我不明白如何假设它是安全的——那么计时器 (NSTimer) 是最合适的。只需使用现在时间与您希望调用函数的时间之间的差异来告诉计时器何时触发。
本地通知用于通知用户某事,当您的应用位于最前面时。换句话说,它们是一种告诉系统代表你提供一些通知界面的方式。通知可以显示在通知中心、锁定屏幕上、作为横幅或警报以及声音。如果这不是您想要的,请不要使用本地通知。
确实,如果您的应用恰好在触发本地通知时位于最前面,那么本地通知会通知您的应用,而不是向用户显示横幅/警报。如果这是可以接受的,那么这将是对本地通知的合理使用。但是不要使用本地通知来代替您自己的计时算法!使用它是因为您想通知用户。
【讨论】:
...当定时器启动时,检查确实是下午 5 点,以防手机进入休眠状态。 @gasher729 如果手机休眠,时间不会停止。如果像用户假设的那样,应用处于唤醒状态且位于最前面,那么即使应用在此期间处于睡眠状态,下午 5 点也是下午 5 点。 正如我在另一条评论中提到的,用户可能会在设置计时器和下午 5 点之前重新打开应用程序之间关闭应用程序。在那种情况下,NSTimer 就不合适了? @AndrewDavis 我不明白为什么不这样做。正如我之前所说,时间并没有因为应用程序关闭而神奇地停止。 NSTimer 不能通过计数来工作,它通过思考来工作。 :) 你(和@gnasher)似乎在错误地假设 NSTimer 是愚蠢的。它不是。要了解这一点,请问问自己本地通知实际上是如何工作的,以便知道何时触发。提示:它使用 NSTimer。哦,对不起,我大声回答了吗?以上是关于如何在 iOS 中的特定时间运行函数?的主要内容,如果未能解决你的问题,请参考以下文章