安排在macOS上的特定时间调用的方法

时间:2017-08-28 19:37:43

标签: objective-c macos cocoa

我想在macOS上的给定时间或间隔调用方法。我的应用程序位于状态栏中,只需要访问互联网即可获取数据。

它不需要显示它正在执行它或它已完成。

我查看了NSTimer scheduledTimerWithTimeInterval:invocation:repeats:NSUserNotifications

NSTimer感觉不是正确的选择,每秒调用一个方法tick只是为了将当前时间与我想要触发方法调用的时间进行比较。

NSUserNotificationCenter我似乎无法在iOS上找到"应用程序didRecieveNoticication`。

有没有办法做我想要的?或者NSTimer是要走的路?

3 个答案:

答案 0 :(得分:0)

-[NSTimer scheduledTimerWithTimeInterval:invocation:repeats:]可能就是你想要的,因为你的应用程序在菜单中已经有了相关的运行循环。创建的计时器将在当前运行循环中进行调度。这些文档仍然相当相关:https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Multithreading/Introduction/Introduction.html

虽然如果您已经知道计时器要点火的时间,您应该使用该时间而不是1秒间隔;这样的投票对电池不利。

值得注意的是,计时器的开火日期是计时器可以触发的第一个时刻,以及可能导致计时器的回调被延迟的各种系统级别考虑因素(计时器合并等)。

答案 1 :(得分:0)

NSCalendarDayChangedNotification 会满足您的需求,而且更多     优雅而不是设置自己的计时器。

在iOS上,您可以使用UIApplicationSignificantTimeChangeNotification作为   好吧。任何一个都可以工作。

// This notification is posted through [NSNotificationCenter defaultCenter]
// when the system day changes. Register with "nil" as the object of this
// notification. If the computer/device is asleep when the day changed,
// this will be posted on wakeup. You'll get just one of these if the
// machine has been asleep for several days. The definition of "Day" is
// relative to the current calendar (NSCalendar.currentCalendar) of the
// process and its locale and time zone. There are no guarantees that this
// notification is received by observers in a "timely" manner, same as
// with distributed notifications.

FOUNDATION_EXPORT NSNotificationName const NSCalendarDayChangedNotification
NS_AVAILABLE(10_9, 8_0);

答案 2 :(得分:-3)

如果它是定期举办的活动,cron可能会为你工作