Wann sollte die faule Instanziierung in iOS verwendet werden?
Ich habe gehört, dass die verzögerte Instanziierung von Objekten in iOS ist sehr verbreitet, aber ich bin mir nicht genau sicher, Wann ich es benutzen soll? Könnte jemand kurz erklären, Wann sollte ich verwenden, verzögerte Instanziierung und Wann sollte ich Sie nur initialisieren, meine Eigenschaften in der init-Methode?
Meine Bedenken in Bezug auf verzögerte Instanziierung ist, dass es erfordert eine Menge code (im Vergleich zu einfach nur zu schreiben es alle in der init-Methode), vor allem, wenn Sie mehrere Eigenschaften zu initialisieren.
Kommentar zu dem Problem
Wie macht es erforderlich, eine Menge von code im Vergleich zu tut es in der init? Sie in der Regel nicht viel mehr als die jus, die Dinge in init
Es ist nicht sinnvoll, in kleinen Projekten und mit neuen Geräten. Wenn Sie besorgt über Speicher, die Sie verwenden müssen, lazy instantiation.
@ymutlu Können Sie erklären, warum es nicht sinnvoll ist, in kleinen Projekten und mit neuen Geräten?
Lesen Sie den zweiten Kommentar, der Speicher und Leistung
@ymutlu ich nicht Zustimmen, es ist alles um Speicher und Leistung. Wenn ein Objekt ist kompliziert zu konfigurieren und es wird nur einmal konfiguriert werden, würde ich viel eher bewegen, in die getter mittels lazy instantiation als eine Menge code in die init, die ist einfach nur überladen den Fluss.
InformationsquelleAutor der Frage Nosrettap | 2012-05-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nochmal mein Kommentar. Manchmal wird diese Technik ist gut, wenn Sie ein Objekt haben, dass muss nur einmal konfiguriert werden und hat einige Konfiguration eingebunden, die Sie nicht wollen, verunstalteten Ihre init-Methode.
Es ist eine ziemlich erfundenes Beispiel, aber Sie können beginnen zu sehen, das Verdienst. Die Methoden werden wie Klassen und machen eine Sache gut. Diese Methode geschieht mit return die roundedView ich will. Wenn ich schlug diesen code in die init-Methode die init-Methode wäre jetzt, zu wissen, die nitty gritty details, wie zum instanziieren und konfigurieren Sie diese Ansicht, und alle anderen Objekte, die ich Schlag es.
InformationsquelleAutor der Antwort Paul.s
Es ist gut, in Situationen, in denen Sie über Objekte verfügen, können einen großen Arbeitsspeicher, so können Sie vermeiden, initialisieren Sie alle diese teuren Objekte, die im moment von der container-Klasse die Initialisierung.
Lazy-Initialisierung bewahren können Speicherverbrauch in mehreren Situationen ...
Es ist jedoch klar, dass, wenn alle Objekte muss eine Initialisierung nach dem oder unmittelbar nach dem container-Objekt-Initialisierung, lazy initialization macht keinen Sinn und ein standard-Konstruktor-Initialisierung verwendet werden soll.
Lazy initialization verwendet werden soll, falls Sie optionale Objekte innerhalb einer Klasse, konnte nie initialisiert werden, während alle Klasse workflow .
InformationsquelleAutor der Antwort aleroot
Wie bei jeder Technik, gibt es nicht einen einzigen, one-size-fits-all-Regel zu sagen, Wann Sie zu faul instanziieren etwas. Ich denke, eine gute Beratung ist der Einsatz der lazy Instantiierung für Dinge, die teuer sind zu instanziieren. Wenn etwas braucht, um eine Menge von Festplatte oder Netzwerk Zugriff, oder nimmt eine Menge CPU-Zeit einrichten, sind Sie besser aufzuschieben, dass die arbeiten bis es wirklich nötig ist (oder tut er das im hintergrund). Besonders für Funktionen, die ein Benutzer kann oder kann nicht nutzen, es hat keinen Sinn, verschwenden viel Zeit in
-init
(oder ähnlichen) Einstellung die Dinge, und dies kann dazu beitragen, dass Ihre Anwendung fühlen sich träge an den Benutzer.Mit dieser sagte, sollten Sie vermeiden, vorzeitige Optimierung. Verbringe nicht zu viel Zeit mit komplizierten code zu schreiben, zu helfen, mit der Leistung, bis Sie haben Dinge getan, die offensichtliche Weg, fand ein performance-problem, und profilierten Ihre code, um gründlich zu verstehen, das Problem. Nachdem Sie dies getan haben, können Sie beginnen, änderungen vorzunehmen, Dinge zu verbessern.
InformationsquelleAutor der Antwort Andrew Madsen
Nicht nur für Speicher und performance, check this out, hier ist ein weiteres Beispiel:
Können Sie verzögerte Instanziierung für eine custom init oder spezielle Konfiguration
und ja auch diese Vorteile, die Speicher und performance.
InformationsquelleAutor der Antwort Francisco Gutiérrez