GCD定时器不执行问题

通常网上搜到的GCD定时器示例就像如下代码:

NSTimeInterval period = 0.5;
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
dispatch_source_set_timer(timer, dispatch_walltime(NULL, 0), period * NSEC_PER_SEC, 0);
dispatch_source_set_event_handler(timer, ^{
    // 定时执行的代码
});
dispatch_resume(timer);

然而我们像这样写好代码后,运行时才发现,定时任务并没有像我们想象的那样执行。
原因是我们创建的这个_timer在这段代码执行完后就被销毁了,可以看出GCD并没有管理它的内存,并没有强持有它,所以我们需要自己想办法让它不被销毁,可以把代码改成如下方式:

@interface TestViewController ()

@property (nonatomic, strong) dispatch_source_t timer;

@end
NSTimeInterval period = 0.5;
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
_timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
dispatch_source_set_timer(_timer, dispatch_walltime(NULL, 0), period * NSEC_PER_SEC, 0);
dispatch_source_set_event_handler(_timer, ^{
    // 定时执行的代码
});
dispatch_resume(_timer);

你可能感兴趣的:(GCD定时器不执行问题)