ios - 直接从 xib 文件实例化 UIViewController 哪个更好?

标签 ios swift uiviewcontroller xib

我正在开发一个项目,其中使用 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/

相关文章:

iOS:Admob 智能横幅不占据全宽

ios - 在 Objective-C 中调用快速 View Controller 文件的变量

ios - -[NSManagedObjectContext 保存 :] 中的数组索引越界问题 (NSRangeException)

swift - 将相等性定义为引用类型的标识?

ios - UITableViewCell 自定义类 - subview 高度约束更改后重新加载单元格高度

swift - 可选的链接和合并,包括。函数参数

ios - 约束动画问题

ios - AVAudioplayer如何让当前时间自动更新

ios - AVAssetWriter/AVAssetWriterInputPixelBufferAdaptor - 黑帧和帧率

ios - 带边框的按钮(最优化)