我读了很多关于NSRunLoop
的帖子,如this,this,this。但不能找出NSRunLoop
实际上做NSRunLoop做什么?
我通常看到的是一个工作线程
wthread = [[NSThread alloc] initWithTarget:self selector:@selector(threadProc) object:nil];
[wthread start];
与NSRunLoop里面
- (void)threadProc
{
NSAutoreleasePool* pool1 = [[NSAutoreleasePool alloc] init];
BOOL isStopped = NO;
NSRunLoop *runloop = [NSRunLoop currentRunLoop];
[runloop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];
while (!isStopped)
{
{
NSAutoreleasePool* pool2 = [[NSAutoreleasePool alloc] init];
[runloop runMode:NSDefaultRunLoopMode
beforeDate:[NSDate distantFuture]];
[pool2 release];
}
}
[pool1 release];
}
和主线程通过一些工作,这线程
[self performSelector:@selector(someWork:) onThread:wthread withObject:nil waitUntilDone:NO];
在将工作从主线程传递给工作我看到许多人这样做。为什么需要NSRunLoop?它有什么作用 ?
我看过NSRunLoop
是用来管理事件的,为什么除了调用runMode在threadProc
之内呢?
我认为它是一个幻想,而(真){//插入要在这里完成的工作},其中你可以动态添加要执行的代码(事件,工作,套接字等)。 runloop不是真的是空的,一个端口已经连接到runloop,它是进程间通信的一种形式。 – foFox 2013-05-10 07:56:00
我发现这个http://bou.io/RunRunLoopRun.html也是有用的 – onmyway133 2015-06-17 17:17:44