RunLoop是经过内部维护的事件循环来对事件/消息进行管理的一个对象数据结构
NSRunLoop是CFRunLoop的封装,提供了面向对象的API多线程
基于事件的定时器oop
观测时间点ui
NSRunLoopCommonModesspa
滑动TableView时RunLoop发生Mode切换,由kCFRunLoopDefaultMode切换为UITrackingRunLoopMode,要确保Timer事件的正常运行,须要同时添加到两种mode下线程
void CFRunLoopAddTimer(runLoop, timer. commonMode) 复制代码
线程与RunLoop一一对应; 本身建立的线程默认是没有RunLoop的3d
+ (NSThread *)_networkThread
{
static NSThread *thread = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
thread = [[NSThread alloc] initWithTarget:self, selector:@selctor(_networkThreadMain:) object:nil];
if ([thread respondsToSelector:@selector(setQualityService:)]) {
thread.qualityOfService = NSQualityServiceBackground;
}
[thread start];
})
}
+ (void)_networkThreadMain:(id)object
{
@autoreleasePool {
[[NSThread currentThread] setName:@"threadMain"];
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
[runLoop addPort:[NSMatchPort port] forMode:NSDefaultRunLoopMode];
[runLoop run];
}
}
复制代码