Frage

    

Diese Frage bereits eine Antwort hier:

    
            
  •              NSOperation vs Grand Central Dispatch                                      8 Antworten                          
  •     
    

Welche Aufgaben besser geeignet, um mit NSOperation im Gegensatz würde GCD zu verwenden, wenn für das iPhone programmieren?

Für mich scheinen sie das Gleiche zu tun. Ich kann die Stärken und Schwächen nicht sehen, einen über den anderen hat.

War es hilfreich?

Lösung

NSOperation oben auf GCD gebaut ist, so ist die Frage mehr, ob Sie NSOperation verwenden oder einen Block direkt an GCD passieren.

Ein NSOperation ist sperrig und benötigt mehr Kessel-Platte-Codes um es einzurichten, aber es hat viel mehr Funktionalität. Sie können die gleiche NSOperation Unterklasse in verschiedenen Teilen des Codes erstellen und sie in die Warteschlange gestellt und ausführen.

Passing um einen Block zu GCD von z.B. dispatch_async ist schnell und Einweg. Sie Wiederverwendung der Regel keinen Block anderswo; Sie gründen nur einen Block, der an diesem Punkt des Codes nur dann ausgeführt wird, übergibt sie an die GCD oder andere APIs, und gehen schnell.

So hat jeder seine Vorzüge.

Andere Tipps

Anscheinend ist NSOperationQueue auf GCD gebaut als von iOS 4; haben die Dokumente einfach nicht aktualisiert worden. Prüfen Sie diesen Beitrag von einem Apple Mitarbeiter hier: https://devforums.apple.com/message/352770 (Möglicherweise müssen ein Konto) Also, sollten Sie Mike Abdullah Rat folgen und die einfachste API für die Aufgabe zu erstellen. dispatch_async niedrige Ebene, in der Regel C-Typ-Material (aber nicht beschränkt auf) und ist gut für die One-Shot und sequentiellen Typ Angebote (Feuer dieses Blockes in dieser Warteschlange, FTW). NSOperationQueues sind höhere Ebene, Objective-C stuff, und gut sind, wenn Sie eine Menge von Operationen an verschiedenen Stellen im Code hinzufügen, und / oder Notwendigkeit Gleichzeitigkeit, Prioritäten und Abhängigkeiten zu verwalten. Mindestens das ist, wie ich sie verwenden.

Wie immer bei solchen Fragen, verwenden Sie die einfachste API zur Verfügung. Messen Sie, ob es ein Performance-Problem ist und dann neu zu bewerten, wenn nötig.

Eine Sache, die ich nicht glaube, hier erwähnt worden ist, ist, dass NSOperations während der Ausführung abgebrochen werden, während ein Block gewährleistet ist abgeschlossen, sobald die Ausführung begonnen hat. Abgesehen davon kann eine GCD-Warteschlange (dispatch_suspend()) aufgehängt werden, so dass alle Blöcke aktuell ausgeführten Blöcke folgenden nicht ausgeführt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top