4 Stimmen

Effizienz der programmatischen Erstellung von Ansichten im Vergleich zu IB

Ich habe eine große Anzahl von UIViews, die in der app delegieren applicationDidFinishLaunching erstellt und zu einem NSMutableArray hinzugefügt werden. Der Benutzer blättert durch diese Ansichten mithilfe eines Seitensteuerelements und einer Bildlaufansicht. Ich habe die UIView und ihre untergeordneten Komponenten in IB erstellt. Sie sind mit einem Controller verdrahtet. Die Erstellung von 170 Ansichten auf dem iPhone dauert etwa 30 Sekunden. Letztendlich werde ich über 1000 Ansichten haben. Das ist nicht nur langsam, sondern wird auch die App wegen des Speicherverbrauchs zerstören. Wie viel schneller und speichereffizienter ist es, alles ohne Ansichten programmatisch zu erstellen? Wie könnten einige der 6000 Fakten-Apps das machen?

Gibt es einen besseren Ansatz, als alles auf einmal zu erstellen? Der Benutzer kann auf eine Ansicht in Steckplatz 400 zugreifen und von dort aus mit dem Blättern beginnen. Wir sind für jeden Vorschlag dankbar.

8voto

Rob Napier Punkte 265102

UIViewController sind faul. Sie laden nur, wenn sie angefordert werden, und entladen automatisch, wenn der Speicher knapp ist (und es ist einfach, sie manuell zu entladen, indem man self.view=nil ).

"Laden" bedeutet hier "eine NIB lesen" oder "programmatisch erstellen". ViewController interessiert das nicht wirklich. Der programmatische Aufbau kann ein wenig schneller sein, da man nicht auf die Festplatte zugreifen muss, aber das ist selten der Engpass, da man immer nur einen ViewController anzeigt.

Was den Weg zu gehen, ist es mehr Stil als Leistung (mit Ausnahme von UITableViewCells, die es Gründe, die Sie brauchen, um programmatisch in den meisten Fällen zu bauen).

Beginnen Sie mit dem Studium der View Controller Programmierhandbuch . Es wird Ihnen zeigen, wie das iPhone dies zu tun gedenkt.

Die Bemerkung von eJames, dass es sich bei den NIBs um XML-Dateien handelt, ist möglicherweise etwas irreführend. NIBs sind Binärdateien, die durch Kompilieren von XIB-Dateien erzeugt werden, die XML sind. Ich würde erst einmal ein Profiling auf dem Telefon durchführen, bevor ich annehme, dass die NIB-Ladezeit tatsächlich ein Problem darstellt. Obwohl ich von Natur aus zu programmatischem Layout neige, habe ich in der Praxis festgestellt, dass NIBs viele UI-Probleme erheblich vereinfachen, und ich greife bei großen Projekten immer wieder auf sie zurück.

2voto

e.James Punkte 112528

Es ist schwierig, eine Antwort vorzuschlagen, ohne etwas mehr über Ihr spezifisches Problem zu wissen, aber ich würde es wagen zu sagen, dass, wenn Sie 1000 verschiedene Dinge anzeigen wollen, die Erstellung von 1000 individuellen Ansichten in IB nicht der richtige Weg ist.

Wenn Ihre Seiten ein gemeinsames Layout haben, können Sie eine UITableView verwenden, um den Inhalt jeder Seite anzuzeigen, und nur die Daten für jede Seite in Ihrem NSMutableArray .

Eine hervorragende Anleitung zur Verwendung von UITableView kann gefunden werden aquí .

Wenn sie nicht über ein gemeinsames Layout verfügen, ist eine programmatische Anordnung der Dinge der richtige Weg. Dies sollte nicht speicher- oder prozessorintensiver sein als die Verwendung von IB, und es wird wahrscheinlich sogar schneller sein, da das Lesen und Parsen einer XML-Datei entfällt (was NIB-Dateien eigentlich sind).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X