我正在开发一个项目,其中使用 xib 而不是 Storyboard,因此我想从 xib 实例化我的 UIViewController,我看到了两种方法,第一种是
let viewController = UINib(nibName: "ViewController", bundle: NSBundle.mainBundle()).instantiateWithOwner(nil, options: [:]).first as! ViewController
还有这个方法
let viewController = ViewController(nibName: "View", bundle: NSBundle.mainBundle())
我总是看到它漂浮在周围。为什么我应该使用第二种方法而不是第一种,使用第一种方法有缺点吗?这是否被认为是不好的做法?为了澄清第一个方法是从 xib 实例化整个 ViewController。因为在 xib 中有一个 UIViewController 直接放在那里,第二个有一个以 View Controller 为所有者的 View 。
最佳答案
这是一个基于意见的问题(或者更确切地说,要求意见作为答案),但我会忽略它。 :)
我之所以说第一种方法是“不好的做法”或晦涩难懂,正如 Phillip Mills 正确所说的那样)是因为您基本上是在对 xib 做出假设,并且可能加载超出您必须加载的内容。第二种方法适合专门属于您的 ViewController 类的 xib(如果名称合适,您甚至不必指定它,至少在 Objective-C 等效项中)。因此 xib 是初始化器的参数。
第一种方法需要更长的路线。它加载一个 Nib (其中也可能包含任何其他对象)。然后,您假设其顶层的第一个对象是您想要的 View Controller 。 Storyboard中的一次意外拖拽,您就会因意外行为而大吃一惊。此外,您还省略了所有者参数,这可能会或可能不会产生后果,具体取决于您所做的事情。
一般来说,第一种方法更适合用于作为多个对象容器(不一定是 View Controller )的 xib,而第二种方法是通常的方法(或“最佳实践”)当加载 View Controller 及其关联的 xib 文件时。
你可以走第一条路线,但在我看来,这基本上是穿着 socks 徒步旅行。它有效,但人们会用一种奇怪的方式看你......
关于ios - 直接从 xib 文件实例化 UIViewController 哪个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38850093/