Przeczytałem wiele wpisów na temat NSRunLoop
, takich jak this, this, this. Ale nie może dowiedzieć się, co faktycznie robi NSRunLoop
Co robi NSRunLoop?
Co ja zwykle zobaczyć to wątek pracownik
wthread = [[NSThread alloc] initWithTarget:self selector:@selector(threadProc) object:nil];
[wthread start];
z NSRunLoop środku
- (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];
}
A głównym wątku przechodzi jakąś pracę do tego wthread
[self performSelector:@selector(someWork:) onThread:wthread withObject:nil waitUntilDone:NO];
Pod względem przekazywania pracy z głównego wątku do wor Wątek, widzę, że wielu ludzi to robi. Dlaczego potrzebujesz NSRunLoop tutaj? Co to robi ?
Przeczytałem, że NSRunLoop
służy do zarządzania zdarzeniami, dlaczego nie ma nic oprócz wywoływania runMode wewnątrz threadProc
?
myślę o nim jako o fantazyjnych while (true) {// insert zadanie do zrobienia tutaj}, gdzie możesz dynamicznie dodawać kod do wykonania (zdarzenia, praca, gniazda itp.). Runloop nie jest naprawdę pusty, port został dołączony do pętli, jest formą komunikacji międzyprocesowej. – foFox
Znalazłem ten http://bou.io/RunRunLoopRun.html, aby był przydatny również – onmyway133