我是iOS开发的新手。我已经阅读了一些我在网上找到的源代码,其中很多都没有包含一个nib文件。所有视图似乎都是从代码中手动绘制的。
拥有/没有nib文件有什么好处?他们为什么选择从代码创建所有内容,而不是像图形文件或* .xib文件那样可视化的内容?
答案 0 :(得分:11)
我喜欢代码的最大原因是它在源代码控制中差异很大。 XIB很难区分,合并,阅读。
复制/粘贴已保存的代码段也很容易。有了IB,我总会忘记一些复选框,让我想知道为什么魔法无效。我的笔记有代码片段。
IB真正擅长的是布局和帮助您使用人机界面指南(控件之间的像素数等...与guiedlines)。
所以,我的个人偏好是IB中的布局和代码中的其他所有内容(包括目标,操作,添加列等等......)。但在动态情景下,IB会崩溃,最终会出现自定义视图。
以下是相关帖子:
Interface Builder (XIB) or Code when merging in a team environment?
答案 1 :(得分:9)
为什么你应该使用笔尖以及为什么不应该使用笔尖有很多原因。没有确定的答案,每个答案都取决于你需要做什么。
除了Nibs提供的明显优势(快速的UI创建过程,最小化.m文件中的视图构造代码),它们提供了一些你无法找到的东西:解决本地化问题。在将您的应用程序本地化为其他语言时,您会偶然发现需要2-3个单词来解释的短语和事物,而在另一种语言中,他们只需要一个。当使用不同的本地化时,这会严重导致视图控制器内的错误视图错误。因此,您可以为Xcode 4中的每个笔尖设置2-3个子笔尖,并按照您喜欢的方式对每个笔尖进行本地化,并将按钮和视图放在正确的位置,而不必担心根据语言重新定位视图用户有。如果你要使用代码来完成所有这些操作,那么你应该放置'if'到处都是,这肯定是一个糟糕的编程习惯,并且容易出错。
我创建了一些视图控制器,如果我不使用界面构建器,则需要数百行才能设置视图。
但是,NIB永远不会以编程方式实现创建视图的性能,因为每个NIB都是用HTML / XML编写的视图描述符,在创建任何视图之前,必须从磁盘读取文件并进行分析。 Nibs还缺少普通代码所具有的自定义选项(阴影,圆角和其他Quartz魔法)。这些自定义选项不可用,因为有许多方法可以使用代码实现相同的结果,或者通过与更高级别的Core Animation层交谈,通过直接解决QuartCore和CGGraphics并在那里做大量的事情,这在大多数情况下肯定更快并且推荐使用案例(使用图层的阴影可能非常慢)。因此,Apple不希望将开发限制为一种特定的绘制方式。
NIB存在是有原因的。您必须确保在应用程序中了解创建NIB的原因。 Nib存在将代码连接到出口,促进本地化,加速开发和清理代码。在项目中你肯定必须使用Nib,但你也必须避免使用它们,普通代码也会以最少或类似的努力给你相同的结果。
最后但并非最不重要的是,考虑内存管理。使用Nib将影响IBOutlets等已分配对象的重新分配。如果您确定要创建的IBOutlet将在您需要时取消分配,请不要使用NIB。改为使用普通代码。
答案 2 :(得分:7)
在代码中创建视图的原因有很多。
我认为最重要的原因是缺乏性能和功能。
当我只想用简单的按钮和标签以及原型设计显示简单的信息时,我正在使用nib文件。
答案 3 :(得分:5)
有一些非常简单的nib,如典型的MainWindow.nib,它们没有本地化内容,可以用一行代码重现。在这种情况下,代码比取消归档nib要快得多。
还有高度动态的布局,无法将其描述为笔尖。
您应该在每种特定情况下选择最方便有效的方式。总会有权衡,只需明智地选择。
答案 4 :(得分:1)
nib文件是一种特殊类型的资源文件,可用于iOS和Mac应用程序的用户界面。 nib文件是Interface Builder文档。您可以使用Interface Builder设计应用程序的可视部分(如窗口和视图),有时还可以配置非可视对象,例如应用程序用来管理其窗口和视图的控制器对象。实际上,在编辑Interface Builder文档时,您将创建一个对象图,然后在保存文件时将其存档。加载文件时,对象图是未归档的。
nib文件 - 因此对象图 - 可能包含占位符对象,这些对象用于引用位于文档外部但可能引用文档中对象的对象,或文档中的对象可能具有的对象引用。一个特殊的占位符是文件的所有者。
在运行时,使用方法loadNibNamed:owner:或其变体加载nib文件。文件所有者是nib文件中的占位符,用于作为该方法的owner参数传递的对象。在运行时加载文件时,无论您在Interface Builder中的nib文件中与文件所有者建立的连接是什么,都会重新建立。
iOS使用nib作为支持故事板的实现细节,即iOS用户界面设计布局格式。故事板允许您在一个画布上设计和可视化应用程序的整个用户界面。对于iOS开发人员,使用故事板是设计用户界面的推荐方法。
答案 5 :(得分:0)
我会从xib开始。完成UI后,将xib迁移到代码。通过这种方式,您可以获得两全其美的效果。 XIB可能很慢,我看过400KB的XIBS(虽然有点罕见)。 XIB虽然确实很苛刻......