我讀了很多關於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