2016-03-23 10 views
0

Ich habe, in meinem ViewController, etwa 15 Schaltflächen über den Interface Builder in Main.storyboard erstellt und den Rest meiner Schaltflächen programmgesteuert erstellt. Um Verzögerungen zu vermeiden, habe ich die meisten Sachen zum Hintergrundthread geschickt, aber alle UI-Sachen, einschließlich der 15 Knöpfe, nicht, weil sie nicht threadsicher sind. Ich würde gerne wissen, wann genau diese 15 Tasten geladen sind. Ist es vor viewDidLoad, zwischen viewDidLoad und viewDidAppear, etc? Da ich immer noch etwas Verzögerung und das Einfrieren des Bildschirms bekomme, habe ich versucht, die meisten Sachen dieses UIViewControllers in einer Methode zu initialisieren und diese Methode in AppDelegate aufgerufen, so dass ich die zeitraubende Aufgabe verschiebe, wenn die App startet (und da scheint es wirklich um eine Steigerung der Leistung zu sein und Druckanweisungen zeigen wirklich, dass der meiste schwere Code beim App-Start aufgerufen wird, anstatt wenn ich den View-Controller präsentiere).Wann genau werden UIViewController-Elemente (erstellt über IB in Main.storyboard) initialisiert/geladen?

Allerdings gibt es immer noch eine anfängliche schwere Belastung jedes Mal, wenn ich diesen ViewController zum ersten Mal bekomme. Wenn ich zum rootViewController zurückkehre und wieder zu diesem ViewController gehe (über presentViewController(viewController, animated: false, completion:nil auf rootViewController und self.dismissViewController(animated:false, completion:nil) auf ViewController), gibt es kein Einfrieren mehr für alle späteren Zeiten, die ich darauf zugreife (Was die Quelle all meiner Schmerzen ist ... Ich verstehe nicht, warum es nur Zeit braucht, wenn ich das erste Mal auf den ViewController zugreife und nicht in allen anderen Zeiten, wenn ich nach dem ersten Mal darauf zugreife, obwohl alle viewDidLoad, viewWillAppear, viewDidAppear keinen Code haben außer den super Klassen, die benötigt werden) .

All dies veranlasste mich zu der Frage, ob diese anfängliche schwere Belastung von den Elementen kommen könnte, die über den Interface Builder erzeugt wurden. Es ist der einzig mögliche Grund, um dieses Verhalten zu erklären. Hier ist der Instrumenten-Screenshot, der das Verhalten zeigt, wo eine starke Belastung beim ersten Zugriff auf viewController auftritt und nur winzige Peeks, die die UI überhaupt nicht beeinflussen (was ich mir wünsche), jedes Mal, wenn ich zu den oben genannten zuerst zugreife Zeit.
Instruments Sample Screenshot

Antwort

1

initWithNibName: Bündel wird aufgerufen, bevor die Spitze loaded.It ist eine Nachricht an eine Ansicht (oder Fenster) Controller, um den Controller gesendet

initWithCoder erstellen wird aufgerufen während des Ladens von einem Storyboard (nur Storyboard). Dies ist eine Nachricht, die an jedes Objekt in einem Archiv gesendet wird, um es zu entpacken.

awakeFromNib wird aufgerufen, nachdem die Spitze loaded.It ist eine Nachricht an jedes Objekt in der Spitze, nachdem alle Objekte in der Spitze vollständig geladen ist, gesendet wurden, in diesem nib alle ihre Ausgangsanschlüsse nach dem Anschluss .