1、创建runloop后,如果没有这个runloop添加任何soures,observer,timer的话,此runloop会立即退出,例如:
NSPort *macPort = [NSPort port];
NSRunLoop *subRunLoop = [NSRunLoop currentRunLoop];
[subRunLoop addPort:macPort forMode:NSDefaultRunLoopMode];
[subRunLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
2、在一个子线程调用performSelector:onThread: withObject: waitUntilDone的时候,系统会给我们创建一个Timer的source,加到对应的RunLoop上去,而子 线程的runloop默认是没有创建的,所以我们必须手动创建,否则performSelector的方法不会调用
3、创建线程,当线程执行完会务时,就会死亡,要想线程保活,则需要在线程执行的方法添加runloop,并且为runloop添加source,如:
- (void)alwaysLiveBackGoundThread{
NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(myThreadRun) object:@"etund"];
self.myThread = thread;
[self.myThread start];
}
- (void)myThreadRun{
[[NSRunLoop currentRunLoop] addPort:[[NSPort alloc] init] forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] run]
}
网友评论