在使用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이기 때문에 생성한 객체는 해당 범위 내에서 유효합니다. 일단 범위를 벗어나면 강력한 참조가 없으면 객체가 자연스럽게 소멸됩니다. 사용 이유를 속성으로 쓸 수 있습니다.