对于应该在后台线程上进行的定期操作,我通常会使用NSTimer
。我想知道为了同样的目的使用gcd是否有任何缺点:
//Set up a dispatch queue owned by an instance of the class. (ie in init).
dispatch_queue_t backgroundQueue = dispatch_queue_create("some.queue",
DISPATCH_QUEUE_SERIAL);
- (void)scheduleRefresh
{
__weak id weakSelf = self;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 120 * NSEC_PER_SEC),
backgroundQueue, ^
{
//Do some recurring task.
//Now, schedule again, by calling recursively, unless weakSelf is nil
[weakSelf scheduleRefresh]
});
}
答案 0 :(得分:8)
您无法取消延迟的块执行(无需编写其他包装代码)。使用计时器,您只需使其无效。
该块保留了它的内容,因此您需要积极考虑并(可能)编写额外的代码来处理它。