每秒安排一次计时器调度源是否安全?

时间:2016-02-02 17:25:37

标签: ios objective-c grand-central-dispatch

我使用GDC创建了这个计时器。它会每1秒调用一次方法。即使在后台,这个计时器在整个时间内都是活着的吗?

self.theTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue());
    dispatch_source_set_timer(self.theTimer, DISPATCH_TIME_NOW, (1.0) * NSEC_PER_SEC, 0.25 * NSEC_PER_SEC);
    dispatch_source_set_event_handler(self.theTimer, ^{
        [self awakeAndProcess];
    });

    // Start the timer
    dispatch_resume(self.theTimer);

方法" awakeAndProcess"有一个"消费者"检查数据队列并尝试发送HTTP请求的行为。因此,它会不断检查是否有要发送的消息

1 个答案:

答案 0 :(得分:2)

由于awakeAndProcess似乎是一个网络呼叫,因此在转到后台以节省电池时最好暂停定时器。但是如果你在后台,那么你的所有任务都会被暂停,所以不应该成为问题。在前台时,最好在触发下一次调用之前等待先前的awakeAndProcess调用完成。否则,最终可能会将很多awakeAndProcess调用一起批处理。如果awakeAndProcess不可重入,那么它可能会对您的代码造成严重破坏。 最好在awakeAndProcess之后暂停计时器,然后在awakeAndProcess完全完成后调用resume。

如果您这样做,那么可以安全地使用您的方法。