在使用GCD定时器时,系统的代码块并不好用
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
dispatch_source_set_event_handler(timer, ^{
NSLog(@"+++++定时器+++++");
});
dispatch_resume(timer);
只有将 dispatch_source_t timer 写成属性handle event才会被调用
@property (nonatomic, strong) dispatch_source_t timer;
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
_timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
dispatch_source_set_timer(_timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
dispatch_source_set_event_handler(_timer, ^{
NSLog(@"+++++定时器+++++");
});
dispatch_resume(_timer);
这是为什么呢?
内存管理...因为你是ARC的,你创建完的对象会在其作用域内有效,一旦出了其作用域,没有强引用的话,自然销毁对象,这也就是你写成属性才可以用的原因。