Was ist der Unterschied zwischen viewDidLoad
und viewDidAppear
? Welche Art von Initialisierung oder benutzerdefiniertem Code steckt in diesen Funktionen?
zB presentModalViewController
funktioniert nur wenn vorhanden in viewDidAppear
und nicht an viewDidLoad
.
Antworten:
viewDidLoad
wird genau einmal aufgerufen, wenn der View Controller zum ersten Mal in den Speicher geladen wird. Hier möchten Sie Instanzvariablen instanziieren und Ansichten erstellen, die für den gesamten Lebenszyklus dieses Ansichtscontrollers gültig sind. Die Ansicht ist jedoch zu diesem Zeitpunkt normalerweise noch nicht sichtbar.viewDidAppear
wird aufgerufen, wenn die Ansicht tatsächlich sichtbar ist, und kann während des Lebenszyklus eines View Controllers mehrmals aufgerufen werden (z. B. wenn ein Modal View Controller geschlossen wird und die Ansicht wieder sichtbar wird). Hier möchten Sie Layoutaktionen ausführen oder Zeichnungen in der Benutzeroberfläche ausführen, z. B. einen modalen Ansichtscontroller. Alles, was Sie hier tun, sollte jedoch wiederholbar sein. Es ist am besten, Dinge hier nicht beizubehalten, da sonst Speicherlecks auftreten, wenn Sie sie nicht freigeben, wenn die Ansicht verschwindet.Siehe: https://developer.apple.com/documentation/uikit/uiviewcontroller
quelle
viewDidLoad
es im Allgemeinen nur einmal und nur einmal aufgerufen wird, gibt es eine Situation, in der es erneut aufgerufen werden kann. Insbesondere wenn Sie jemals eine erhaltendidReceiveMemoryWarning
, werden Ihre nicht sichtbaren Ansichten möglicherweise freigegeben (obwohl die Ansichtssteuerungen unberührt bleiben) und bei Ihrer RückkehrviewDidLoad
möglicherweise erneut aufgerufen.didReceiveMemoryWarning
. Aber ich bin damit einverstanden, dass es Ihnen gut gehenviewDidLoad
sollte , wenn Sie beim Schreiben bewährte Verfahren anwenden . Mein einziger Punkt ist, dass die schlampige Verwendung von Ivars und die manuelle Speicherverwaltung definitiv zu Undichtigkeiten führen könnenviewDidLoad
. Die Menschen sollten für dasdidReceiveMemoryWarning
Szenario sensibel sein und entsprechend programmieren.viewDidLoad
Code, auf die durchgesickert sein wirddidReceiveMemoryWarning
. Seufzer.Einfach ausgedrückt, möchten Sie alle Steuerelemente oder Arrays erstellen
viewDidLoad
, inviewDidAppear
denen Sie diese Steuerelemente oder Arrays wie in aktualisieren möchten.viewDidLoad
wird einmal aufgerufen, wenn der Controller erstellt wird, undviewDidAppear
wird jedes Mal aufgerufen, wenn die Ansicht angezeigt wird. Angenommen, Sie haben eine modale Ansicht, die Sie präsentieren, wenn diese Ansicht verworfen wird,viewDidAppear
wird aufgerufen undviewDidLoad
nicht aufgerufen.quelle
viewDidLoad
kann mehrmals aufgerufen werden . Wenn Ihre Ansicht, während sie nicht angezeigt wird (unter einem Stapel anderer Ansichten), von älteren Versionen von iOS in einer Situation mit wenig Arbeitsspeicher entladen wird, lädt der Ansichts-Controller die Ansicht automatisch neu, wenn sie erneut auf dem Bildschirm angezeigt werden muss. In späteren Versionen von iOS können Sie die Speicherauslastung reduzieren, indem Sie das tun, was früher iOS für Sie getan hat: Entladen Sie Offscreen-Ansichten, wenn einedidReceiveMemoryWarning
Nachricht eingeht. In diesem FallviewDidLoad
wird die erneut aufgerufen.