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.
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.
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.
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.
Si potrebbe anche prendere in considerazione NSOperation
Per vedere un esempio di questo, uno sguardo ai post di Drew McCormack sulla MacResearch.
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.
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
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.
NSOperation supporta solo iOS 4.0 o quest'ultimo. –