dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
self.timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
dispatch_source_set_timer(self.timer, DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC, 1 * NSEC_PER_SEC);
dispatch_source_set_event_handler(self.timer, ^{
NSLog(@"GCDTimer %@", [NSThread currentThread]);
});
dispatch_resume(self.timer);
Результат печати:
2020-08-04 15: 01: 43.185442 + 0800 MemoryMore1 [7480: 1418672] GCDTimer {number = 6, name = (null)}
2020-08-04 15: 01: 44.679590 + 0800 MemoryMore1 [7480: 1418673] GCDTimer {number = 5, name = (null)}
2020-08-04 15: 01: 45.679329 + 0800 MemoryMore1 [7480: 1418673] GCDTimer {number = 5, name = (null)}
2020-08-04 15: 01: 46.678351 + 0800 MemoryMore1 [7480: 1418673] GCDTimer {number = 5, name = (null)}
2020-08-04 15: 01: 47.679343 + 0800 MemoryMore1 [7480: 1418673] GCDTimer {number = 5, name = (null)}
2020-08-04 15: 01: 48.678826 + 0800 MemoryMore1 [7480: 1418674] GCDTimer {number = 3, name = (null)}
Когда dispatch_source_t является таймером, почему поток продолжает меняться, если он не является основным потоком?