我有使用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请求。因此,它会不断检查是否有要发送的消息

最佳答案

最好在去后台时暂停计时器以节省电池,因为awakeAndProcess似乎是网络调用。但是,如果您处于后台,则所有任务都将被挂起,因此这不是问题。在前台时,最好等待上一个awakeAndProcess调用完成,然后再触发下一个调用。否则,您可能最终将很多awakeAndProcess调用分批处理。如果awakeAndProcess不是可重入的,则可能导致代码混乱。
最好在awakeAndProcess之后暂停计时器,然后在awakeAndProcess完全完成之后再调用resume。

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

10-08 06:29