Wenn ich ein Objekt aus einer Nib-Datei laden kann, ohne den Besitzer der Datei zu verwenden, was ist dann der Grund für den Besitzer der Datei? Auch die Outlet-Action-Verbindungen können ohne den Besitzer der Datei erstellt werden. Zum Beispiel kann ich die Verbindungen direkt vom Objekt zur Spitze machen. Also wieder kann ich wirklich nicht die Notwendigkeit für den Besitzer der Datei verstehen. Hat es irgendeine Beziehung mit MVC-Muster? Muss der Besitzer der Datei vom Typ UIViewController sein?Welche Probleme können dazu führen, dass der Eigentümer der nib-Datei auf null gesetzt wird?
Antwort
Während des Ladens einer Nib-Datei generiert Cocoa jedes serialisierte Objekt in der NIB-Datei. Dann ruft es für jede Verbindung in der NIB-Datei setValue:forKey:
auf dem Zielobjekt auf, um die Verbindung zu erstellen. Einige Verbindungen bestehen zum Objekt nil
. Diese setValue:forKey:
Nachrichten werden an jedes Objekt gesendet, das als Dateieigner übergeben wird. Wenn Sie keinen Dateibesitzer haben, werden die nil
Verbindungen ignoriert. Wenn Sie keine nil
Verbindungen haben, dann wäre es nicht anders, als einen Dateibesitzer nicht zu haben. Dies ist nicht besonders häufig.
All dies ermöglicht es Ihnen, mehrere Instanzen derselben nib-Dateiobjekte zu instanziieren, indem Sie verschiedene Dateibesitzer an den Ladevorgang übergeben.
EDIT:
Denken Sie daran, eine Nib-Datei nur ein Haufen von serialisierten Objekten. Wenn Sie einen Ansichtscontroller programmgesteuert mit initWithNibName:bundle:
erstellen, ist der Ansichtscontroller bereits vorhanden, bevor die NIB-Datei geladen wird. Die Objekte in der NIB-Datei wollen fast immer auf diesen View-Controller verweisen können. Also übergeben wir den View-Controller als Dateieigentümer an UINib
. Überall dort, wo die NIB-Datei nil
lautet, ersetzt UINib
diese Datei durch den Dateibesitzer (normalerweise der View-Controller).
Dies ist sehr flexibel, aber Flexibilität ist nicht der Punkt. Es gibt keine Möglichkeit, auf den View-Controller in der NIB-Datei zu verweisen, wenn Sie ihn nicht während der Nib-Instanziierung übergeben haben.
- 1. MySQL stürzt ab ("Einige Zeiger können ungültig sein und dazu führen, dass der Speicherabzug abgebrochen wird")
- 2. Welche Dinge können dazu führen, dass ein ganzes System für 100-1000 Millisekunden hängen bleibt?
- 3. Welche Situationen führen dazu, dass Oracle-Pakete ungültig werden?
- 4. StringToCoTaskMemUni oder StringToCoTaskMemAnsi-Methoden können dazu führen, dass hängen?
- 5. Was könnte dazu führen, dass deserializeUser() nicht aufgerufen wird?
- 6. Welche Eingabe wird dazu führen, dass golang's json.Marshal einen Fehler zurückgibt?
- 7. Graustufenbilder, die dazu führen, dass der Schieberegler "Toggle" bricht
- 8. Vermutliche Probleme bei der Entsorgung von Excel-Objekten, die dazu führen, dass nachfolgende Selen-Tests fehlschlagen?
- 9. Welche Bedingungen führen dazu, dass eine iOS-App neben hoher Speicherauslastung vom Betriebssystem heruntergefahren wird?
- 10. Wird dies dazu führen, dass schlechte Dinge passieren?
- 11. Was kann dazu führen, dass die Web.sitemap nicht gefunden wird?
- 12. was kann dazu führen, dass node.js gedruckt und beendet wird?
- 13. was kann dazu führen, dass pdb.set_trace() ignoriert wird?
- 14. Was kann dazu führen, dass ViewData.ModelState.IsValid falsch wird
- 15. Probleme mit Windows 2003 Service und Timer, die dazu führen, dass Tick nicht aufgerufen wird?
- 16. Was könnte dazu führen, dass listBox.Items.Remove das falsche Element entfernt?
- 17. was könnte dazu führen, dass diese Baumansicht mehrfach gefüllt wird?
- 18. Was könnte dazu führen, dass PUSHD fehlschlägt?
- 19. Welche der Eigenschaften des DOM-Elements kann dazu führen, dass die Seite vom Browser neu gezeichnet wird?
- 20. Warum wird der Druckkreis standardmäßig auf Null gesetzt?
- 21. Was könnte dazu führen, dass der Header "unordered_map" nicht gefunden wird?
- 22. Was könnte dazu führen, dass die Rails-Migration fehlschlägt
- 23. Was könnte dazu führen, dass CentOS nicht auf bestimmter Hardware installiert wird?
- 24. Was kann dazu führen, dass Java nach System.exit() weiterläuft?
- 25. Wie kann ich sicherstellen, dass ein Java-Objekt (das kryptografisches Material enthält) auf Null gesetzt wird?
- 26. Was würde dazu führen, dass memcached falsche Ergebnisse liefert?
- 27. Was könnte dazu führen, dass der Slave LL_START_ENC_RSP während der BLE-Verschlüsselung nicht sendet?
- 28. Was könnte dazu führen, dass Perl Systemaufrufe fehlschlagen?
- 29. Was könnte dazu führen, dass SharePoint WSDL nicht herunterladen kann?
- 30. Welche Bedingung bewirkt, dass der nsiWebProgressListener.STATE_START in Firefox ausgelöst wird?
Was ist der Grund für Verbindungen zu einem Nullobjekt? –
"kein Objekt" in IB bedeutet "das Objekt als Dateieigner übergeben." –
Der einzige Grund für die Existenz des Eigentümers der Datei besteht darin, den Nibs mehr Dynamik hinzuzufügen, indem wir ihm die Möglichkeit geben, ihn während des Ladevorgangs zu ändern. –