2012-06-04 5 views
5

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

4

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.

+0

Was ist der Grund für Verbindungen zu einem Nullobjekt? –

+0

"kein Objekt" in IB bedeutet "das Objekt als Dateieigner übergeben." –

+0

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. –

Verwandte Themen