Ho letto molti post su NSRunLoop
, come this, this, this. Ma non riesco a capire cosa realmente fa NSRunLoop
Cosa fa NSRunLoop?
Quello che di solito vedo è un thread di lavoro
wthread = [[NSThread alloc] initWithTarget:self selector:@selector(threadProc) object:nil];
[wthread start];
con una NSRunLoop suo interno
- (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];
}
E il filo conduttore passa un po 'di lavoro per questo wthread
[self performSelector:@selector(someWork:) onThread:wthread withObject:nil waitUntilDone:NO];
In termine di passaggio di lavoro dal thread principale al wor thread ker, vedo molte persone farlo. Perché hai bisogno di NSRunLoop qui? Che cosa fa ?
ho letto che NSRunLoop
viene utilizzato per gestire gli eventi, perché c'è nulla se non chiamare RunMode all'interno threadProc
?
ci penso come una fantasia while (true) {// Inserire lavoro da fare qui}, dove è possibile aggiungere in modo dinamico il codice da eseguire (eventi, lavoro, prese ecc.). Il runloop non è veramente vuoto, una porta è stata collegata al runloop, è una forma di comunicazione tra processi. – foFox
Ho trovato utile anche questo http://bou.io/RunRunLoopRun.html – onmyway133