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