2016-08-09 67 views
1

Ich arbeite an einem Projekt, in dem ich xib anstelle des Storyboards bin mit, damit ich meine UIViewControllers von xibs instanziiert werden soll, und ich sah, wie zwei Methoden der es mit dem erstenInstanziieren eines UIViewController direkt aus einer XIB-Datei, die besser ist?

let viewController = UINib(nibName: "ViewController", bundle: NSBundle.mainBundle()).instantiateWithOwner(nil, options: [:]).first as! ViewController 

sein tun Und es gibt auch diese Methode

let viewController = ViewController(nibName: "View", bundle: NSBundle.mainBundle()) 

Welche ich immer schweben sehen. Warum sollte ich die zweite Methode verwenden und nicht die erste, und gibt es einen Nachteil bei der Verwendung der ersten Methode, und gilt das als schlechte Praxis? Um die erste Methode zu verdeutlichen, wird der gesamte ViewController von der XIB instanziiert. Wie in der Xib hat eine UIViewController direkt dort, und die zweite hat die Ansicht, die den View-Controller als Besitzer hat.

+1

Meinung: Option 1 ist sowohl flexibler als auch obskurer. Wenn ich es im Code sah, würde es mich beunruhigen, welche ungewöhnlichen Umstände vorlagen. –

Antwort

1

Das ist eine meinungsbasierte Frage (oder eher nach einer Meinung als Antwort zu fragen), aber ich lasse es gleiten. :)

Der Grund, warum ich die erste Methode sagen würde "schlechte Praxis" oder obskur, wie Phillip Mills richtig sagte) ist, dass Sie im Grunde nehmen Annahmen auf der Xib und möglicherweise mehr laden als Sie müssen. Die zweite Methode eignet sich für eine XIB, die speziell Ihrer ViewController-Klasse angehört (wenn der Name passt, müssen Sie dies zumindest im Objective-C-Äquivalent nicht einmal angeben). Daher ist die Xib ein Parameter des Initialisierers.

Die erste Methode benötigt eine längere Route. Es lädt eine Feder (und das könnte auch andere Objekte enthalten). Dann nehmen Sie an, dass das erste Objekt auf der obersten Ebene der gewünschte View-Controller ist. Ein versehentliches Ziehen in deinem Storyboard und du wirst Spaß daran haben, deine Augenbrauen für unerwartetes Verhalten anzuheben. Außerdem geben Sie den Parameter owner ein, der je nach dem, was Sie tun, Konsequenzen haben kann oder nicht.

Im Allgemeinen verwendet die erste Methode eine Methode, die eher für XIBs verwendet wird, die Container für mehrere Objekte sind (nicht unbedingt View Controller), während der zweite der übliche Weg ist (oder "Best Practice")) beim Laden eines View-Controllers mit der zugehörigen XIB-Datei.

Sie können die erste Route gehen, aber das ist im Grunde auf Socken wandern, imo. Es funktioniert, aber die Leute werden Sie auf eine seltsame Weise betrachten ...