2009-05-29 13 views
6

Ci sono thread nell'obiettivo C? In tal caso, come vengono dichiarati e utilizzati?Threading in Objective-C

Se qualcuno conosce il multithreading nell'obiettivo C, per favore condividi con me.

Grazie e saluti.

risposta

9

Se si sta sviluppando l'utilizzo di Cocoa (ovvero per mac o iphone), si ha accesso alla classe NSThread, che può essere utilizzata per il multithreading. Googling per NSThread ti troverà l'API.

È possibile dichiarare come l'utilizzo di:

NSThread *mythread = [[NSThread alloc] initWithTarget:target selector:selector object:argument]; 

Dove bersaglio e il selettore è l'oggetto e il selettore si desidera avviare un thread con, e l'argomento è un argomento da inviare al selettore.

Quindi utilizzare [inizio mito] per avviarlo.

18

Utilizzare un metodo semplice per eseguire lo spin di un metodo in una nuova discussione.

+ (void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument su NSThread. Se non si esegue la raccolta dei rifiuti, è necessario impostare il proprio pool di autorelease.

Un altro modo semplice se non si vuole bloccare il thread principale è quello di utilizzare.

- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg su NSObject

A seconda del tipo di concorrenza si sta dopo si dovrebbe anche dare un'occhiata a NSOperation che si può dare di blocco gratuito in modo da poter condividere tra più thread tra le altre cose.

3

Si potrebbe anche prendere in considerazione NSOperation

Per vedere un esempio di questo, uno sguardo ai post di Drew McCormack sulla MacResearch.

+0

NSOperation supporta solo iOS 4.0 o quest'ultimo. –

2

Prima di andare lontano con cose come detachNewThreadSelector: assicuratevi di controllare la documentazione ufficiale di Apple. Per una panoramica di alto livello delle opzioni (comprese le code di operazioni, le code di invio e così via), c'è lo Concurrency Programming Guide. E, per dare un'occhiata al threading di livello inferiore (e meno consigliato), c'è lo Threading Programming Guide.

Sicuramente non si desidera iniziare a girare i thread senza leggere prima quello che Apple ha da dire sull'argomento. Hanno lavorato molto con cose come GCD per rendere più facile e sicuro scrivere programmi concorrenti.

5

Sì, ci sono concetti di filettatura in Objective C. e ci sono modo multiplo per raggiungere multi threading in Objective C.

1>NSThread

[NSThread detachNewThreadSelector:@selector(startTheBackgroundJob) toTarget:self withObject:nil]; 

Questo creerà un nuovo thread nel sfondo. dalla tua discussione principale

2>Utilizzando performSelector

[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES]; 

si esibirà compito UI sul thread principale se si chiama questo dal thread in background ... È inoltre possibile utilizzare

[self performSelectorInBackground:@selector(abc:) withObject:obj]; 

che creerà una thread di sfondo.

3>Utilizzando NSOperation

Follow this link

4>Utilizzando GCD

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     [self callWebService]; 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [self updateUI]; 
     }); 
    }); 

Will callWebService in thread in background e una volta che è stata completata. Sarà updateUI nella discussione principale. More about GCD

Questo è quasi tutto il multithreading utilizzato in iOS. spero che questo ti aiuti.