2016-07-14 9 views
1

Ich habe eine UITableView, wo ich Daten von einem Remote-Server eins nach dem anderen herunterladen, wenn die Zellen angezeigt werden.Eine NSOperationQueue pro Zelle oder pro UIViewController?

Ist es sicher, eine NSOperationQueue pro Zelle zu erstellen? Ich bin besorgt, dass dies eine Thread-Explosion auslösen könnte (wenn es zu viele Threads gibt). Die NSOperationQueue pro Zelleninstanz lässt sich einfacher entwickeln, da nach der Wiederverwendung der Zelle alle Operationen auf der NSOperationQueue abgebrochen werden können.

Im Gegensatz dazu kann ich, wenn ich eine NSOperationQueue pro UIViewController verwende, die NSOperationQueue an die Zelle übergeben, und die Zelle kann ihre NSOperation zu dieser Warteschlange hinzufügen. Aber ich muss auf irgendeine Weise so umgehen, dass ich diesen Vorgang abbrechen kann, wenn die Zelle wiederverwendet wird (Speicherverweis auf die NSOperation in einem Wörterbuch innerhalb des UIViewControllers, etc.).

Die meisten Tutorials haben eine NSOperationQueue im UIViewController, aber ich habe gesehen, wo er eine NSOperationQueue für jede Zelle verwendet.

+0

das beste Beispiel https://developer.apple.com/library/ios/samplecode/LazyTableImages/Introduction/Intro.html von Apple einfach folgen. –

+0

hey @MikeAlter hast du andere Gründe, nicht nur, weil der Apple-Beispielcode diesen Ansatz verwendet, oder andere Tutorials verwenden auch diesen Ansatz? Danke –

+0

Ich habe dieses Beispiel implementiert, die Art und Weise des Aufrufs von ws und das Herunterladen von Bildern ist großartig und auch die Leistung freundlich –

Antwort

0

Im unten angegebenen Tutorial bieten die Option für den Vorgang abzubrechen und auch den Betrieb entsprechend Ihrer Anforderung wieder aufzunehmen.

Ein gutes Beispiel von Ray Wenderlich: http://www.raywenderlich.com/19788

Update:

Wenn Sie verwenden NSOperationQueue in UITableView dann müssen Sie richtig verwalten. Zum Beispiel haben AFNetworking-Bibliothek verwenden NSOperationQueue für Bild-Download von URL und andere Aufgabe, die gut funktionieren. Also mein Vorschlag ist, wenn Sie NSOperationQueue in UITableView verwenden möchten, dann verwalten Sie es richtig, sonst es definitiv ein Problem in der Zukunft zu lange Daten zu behandeln.

+0

Danke für die Antwort. Aber ich frage nicht, wie ich das machen soll. Ich möchte wissen, welcher Weg besser ist und ob die Verwendung von NSOperationQueue für jede Zelle gefährlich ist. –

+0

Ich hoffe, Sie erkennen, dass eine Zelle viele, viele verschiedene Zeilen in einer Tabellenansicht anzeigen kann und wird, so dass eine NSOperationQueue pro Zelle wahrscheinlich nicht erreicht, was Sie erreichen möchten. – gnasher729

+0

@ gnasher729 Dies kann erreicht werden. Wenn Sie sich die Fragebeschreibung ansehen, habe ich dort beschrieben, dass ich alle Operationen der NSOperationQueue einer Zelle abbringe, wenn die Zelle wiederverwendet wird. Selbst wenn zum Beispiel Zeile 1 am Anfang angezeigt wird und eine NSOperation für Zeile 1 ausgeführt wird, wird die NSOperation für Zeile 1 abgebrochen, wenn sie nicht angezeigt wird und dann für Zeile 10 wiederverwendet wird, und ich füge neue NSOperation für Zeile 10 hinzu . –

Verwandte Themen