Kann mir bitte jemand erklären, wann der initWithNibName und wann initWithCoder zu verwenden?Unterschied zwischen initWithNibName und initWithCoder
Antwort
Von Apple Dokumentation:
InitWithCoder kodiert für ein Objekt für die Archivierung. Ein Codierer weist das Objekt dazu an, indem er encodeWithCoder: oder initWithCoder: aufruft. encodeWithCoder: Weist das Objekt an, seine Instanzvariablen in den angegebenen Codierer zu codieren ...
InitWithNibName Gibt ein NSNib-Objekt zurück, das für die NIB-Datei im angegebenen Bundle initialisiert wurde. Nachdem die NIB-Datei geladen wurde, verwendet das NSNib-Objekt die Ressourcenzuordnung des Bundles, um zusätzliche Ressourcen zu finden, auf die die Nib verweist. Wenn Sie für den Bundle-Parameter nil angegeben haben, sucht das NSNib-Objekt stattdessen nach den Ressourcen in dem Bundle, das der Klasse des Eigentümers der NIB-Datei zugeordnet ist. Wenn die NIB-Datei keinen Eigentümer hat, sucht das NSNib-Objekt nach zusätzlichen Ressourcen im Hauptpaket der Anwendung.
Ersteres wird zum Codieren einzelner Objekte in Ihrem Code verwendet, letzteres wird zum Abrufen einer NSNib-Datei verwendet, die Ressourcenobjekte enthält.
initWithNibName:
wird normalerweise mit einem View-Controller-Objekt verwendet. Die Idee ist, dass Sie eine NIB-Datei (oder XIB, die gleiche Sache) haben, die eine UIView
(oder NSView
) hat, die Sie bereits in Interface Builder entworfen haben. Wenn Ihr View-Controller gestartet wird, verfügt er über eine view
-Eigenschaft und -Outlet, die Sie selbst zeichnen müssten - außer dass Sie es bereits in IB entworfen haben. Mit diesem Konstruktor können Sie also das neue Controller-Objekt starten und in der NIB-Datei angeben, welche Ansicht es anzeigen soll. Die Diskussion über die Verdrahtung Ihrer NIB selbst, um sicherzustellen, dass dies erfolgreich ist, ist ein wenig über das Thema hier hinaus.
initWithCoder:
hat eine andere Aufgabe insgesamt. Wenn Sie ein Objekt unter Verwendung von encodeWithCoder:
serialisiert haben, müssen Sie diese Daten schließlich aus dem Universum (oder "dekodieren") entfernen, um sie wieder in ein Objekt Ihrer Klasse umzuwandeln.
Wie auch immer, zur Erinnerung: Sie würden encodeWithCoder:
und initWithCoder:
für Ihre Klasse nur implementieren, wenn Sie möchten, dass Ihr Objekt das NSCoding
Protokoll unterstützt. Sie verwenden initWithNibName:
(normalerweise implementieren Sie es nicht selbst), wenn Sie ein Objekt auslösen möchten, das seine Eigenschaften mit Objekten initialisieren kann, die in einer NIB-Datei archiviert sind.
Es gibt einen wirklich tollen Überblick über NSCoding
over here.
Storyboard
Sie sollten nur -initWithCoder:
zu -initWithNibName
bevorzugen, da die ehemaligen aufgerufen wird, wenn eine Ansicht von Storyboard geladen.
- 1. initWithNibName Methode im Storyboard
- 2. Unterschied zwischen Vorzeichen & und *?
- 3. VBA: Unterschied zwischen & und +
- 4. Unterschied zwischen "**/* /" und "** /"?
- 5. Unterschied zwischen $ # und $ {# @}
- 6. Unterschied zwischen = und: =
- 7. Unterschied zwischen '#', '%' und '$'
- 8. MySQL: Unterschied zwischen ', `,' und '
- 9. C++ Unterschied zwischen '//' und '///'
- 10. Unterschied zwischen String.Empty und ""
- 11. Unterschied zwischen `% in%` und `==`
- 12. Unterschied zwischen numpy.logical_and und &
- 13. Unterschied zwischen. und #
- 14. Unterschied zwischen // und http: //
- 15. NSManaged Object initWithCoder Error
- 16. Was ist initWithCoder?
- 17. Wann wird InitWithCoder aufgerufen?
- 18. Unterschied zwischen -Wconversion zwischen gcc und g ++
- 19. Was entspricht initWithNibName: auf OSX?
- 20. Iphone Speicher in initWithNibName reservieren
- 21. initWithNibName Funktioniert nicht wie erwartet
- 22. Unterschied zwischen Wörterbuch und Hashtable
- 23. Unterschied zwischen FetchMode und FetchType
- 24. Unterschied zwischen Application_Start und Application_OnStart
- 25. Unterschied zwischen Uint8Array und Uint8ClampedArray
- 26. Unterschied zwischen BOOST_CHECK_CLOSE und BOOST_CHECK_CLOSE_FRACTION?
- 27. Unterschied zwischen Suche und Index
- 28. Unterschied zwischen AJAX und Senden
- 29. Unterschied zwischen Spekulation und Vorhersage
- 30. Unterschied zwischen inproc und outproc
ah, sieht aus wie Jordan hat es schon genagelt, unten ;-) –