2009-05-29 14 views
6

Gibt es Gewinde in Objective C? Wenn ja, wie werden sie deklariert und verwendet?Gewinde in Objective-C

Wenn jemand über Multithreading in Objective C weiß, bitte teilen Sie mit mir.

Dank und Grüße.

Antwort

9

Wenn Sie mit Cocoa (dh für das Mac oder iPhone) entwickeln, haben Sie Zugriff auf die Klasse NSThread, die für Multithreading verwendet werden kann. Googlen für NSThread finden Sie die API.

Sie können erklären, wie mit:

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

Wo Ziel und Wähler das Objekt ist und Selektor Sie einen Thread gestartet werden soll, und das Argument ist ein Argument an den Wähler zu senden.

Verwenden Sie dann [mythread start], um es zu starten.

18

Ein einfacher Weg, um nur eine Methode in einem neuen Thread auszukoppeln ist zu verwenden.

+ (void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument auf NSThread. Wenn Sie keinen Müll sammeln, müssen Sie Ihren eigenen Autorelease-Pool einrichten.

Eine andere einfache Möglichkeit, wenn Sie nicht nur den Haupt-Thread blockieren möchten, ist zu verwenden.

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

Je nachdem, welche Art von Gleichzeitigkeit Sie sind, nachdem Sie auch einen Blick auf NSOperation nehmen sollte, dass Sie frei Verriegelung geben kann, so dass Sie es zwischen mehreren Threads unter anderem teilen können.

3

Sie auch in NSOperation

aussehen könnte ein Beispiel dafür zu sehen, haben einen Blick auf Drew McCormack Beitrag auf MacResearch.

+0

NSOperation unterstützt nur iOS 4.0 oder höher. –

2

Bevor Sie mit Dingen wie detachNewThreadSelector zu weit gehen: Achten Sie darauf, Apples offizielle Dokumentation zu überprüfen. Für eine allgemeine Übersicht über Optionen (einschließlich Operationswarteschlangen, Versandwarteschlangen usw.) gibt es die Concurrency Programming Guide. Und für einen Blick auf das untergeordnete (und weniger empfohlene) Threading gibt es das Threading Programming Guide.

Sie wollen definitiv nicht nur Threads starten, ohne zu lesen, was Apple zu dem Thema als erstes zu sagen hat. Sie haben viel mit Sachen wie GCD gearbeitet, um es einfacher und sicherer zu machen, gleichzeitig Programme zu schreiben.

5

Ja, es gibt Einfädeln Konzepte in Objective C und es gibt mehrere Wege Multi-Threading in Objective C.

1>NSThread

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

Dies zu erreichen, wird einen neuen Thread in der erstellen Hintergrund. von deinem Hauptthread.

2>Mit perform

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

wird UI Aufgabe auf dem Haupt-Thread ausführen, wenn Sie diese aus Thread Hintergrund rufen ... Sie können auch

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

benutzen, die wird ein erstellen Hintergrundfaden.

3>Mit NSOperation

Follow this link

4>GCD Mit

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

Will callWebService in Hintergrund-Thread und sobald es fertig ist. Es wird updateUI im Hauptthread. More about GCD

Dies ist fast der gesamte Multithreading, der in iOS verwendet wird. hoffe das hilft.