我使用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请求的行为。因此,它会不断检查是否有要发送的消息
答案 0 :(得分:2)
由于awakeAndProcess似乎是一个网络呼叫,因此在转到后台以节省电池时最好暂停定时器。但是如果你在后台,那么你的所有任务都会被暂停,所以不应该成为问题。在前台时,最好在触发下一次调用之前等待先前的awakeAndProcess调用完成。否则,最终可能会将很多awakeAndProcess调用一起批处理。如果awakeAndProcess不可重入,那么它可能会对您的代码造成严重破坏。 最好在awakeAndProcess之后暂停计时器,然后在awakeAndProcess完全完成后调用resume。
如果您这样做,那么可以安全地使用您的方法。