- (
void
) doFireTimer:(NSTimer *)timer
{
NSLog(
@doFireTimer
, %f, timer.timeInterval);
}
- (
void
) MyThread
{
NSRunLoop* loop = [NSRunLoop currentRunLoop];
// Creates and returns a new NSTimer object and schedules it on the current run loop in the default mode
[NSTimer scheduledTimerWithTimeInterval:
0.1
target:self selector:
@selector
(doFireTimer:) userInfo:nil repeats:YES];
NSInteger loopCount =
2
;
do
{
// 启动当前thread的run loop直到所指定的时间到达,在run loop运行时,run loop会处理所有来自与该run loop联系的input sources的数据
// 对于本例与当前run loop联系的input source只有Timer类型的source
// 该Timer每隔0.1秒发送触发时间给run loop,run loop检测到该事件时会调用相应的处理方法(doFireTimer:)
// 由于在run loop添加了observer,且设置observer对所有的run loop行为感兴趣
// 当调用runUntilDate方法时,observer检测到run loop启动并进入循环,observer会调用其回调函数,第二个参数所传递的行为时kCFRunLoopEntry
// observer检测到run loop的其他行为并调用回调函数的操作与上面的描述相类似
[loop runUntilDate:[NSDate dateWithTimeIntervalSinceNow:
0.2
]];
// 当run loop的运行时间到达时,会退出当前的run loop,observer同样会检测到run loop的退出行为,并调用其回调函数,第二个参数传递的行为是kCFRunLoopExit.
--loopCount;
}
while
(loopCount);
}