- 在子线程创建定时器时,需要手动开启子线程的运行循环。
dispatch_async(dispatch_get_global_queue(0, 0), ^{
// 在子线程创建定时器
/*
scheduled 或 timer 方式创建
*/
self.timer = [NSTimer timerWithTimeInterval:1.0
target:self
selector:@selector(updateTimer:)
userInfo:nil
repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSDefaultRunLoopMode];
// 启动子线程的运行循环
/*
这句代码就是一个死循环!如果不停止运行循环,不会执行添加到此句之后的任何代码
*/
CFRunLoopRun();
// 停止子线程运行循环之前,不会执行添加到此处的任何代码
});
// 定时器执行操作方法
- (void)updateTimer {
static int num = 0;
num++;
// 满足条件后,停止当前的运行循环
if (num == 8) {
// 停止当前的运行循环
/*
一旦停止了运行循环,后续代码能够执行,执行完毕后,线程被自动销毁
*/
CFRunLoopStop(CFRunLoopGetCurrent());
}
}