2012-01-14 45 views
7

我是iOS开发新手。我已经阅读了我在网上找到的一些源代码,其中很多都没有包含单个的nib文件。所有的视图似乎都是从代码手动绘制的。应该或不应该使用nib文件?

有/没有nib文件的好处是什么?他们为什么选择从代码创建所有东西,而不是可以形象化的东西,如故事板或* .xib文件?

+0

不要忘记:“iOS 5及更高版本支持的故事板是 ,对于新项目默认启用。如果您的应用程序必须在较早的版本的iOS上运行 ,但不能使用故事板并应继续使用nib文件“。 (iOs App编程指南©Apple Inc)。 – Kenneth 2013-02-22 10:52:36

回答

5

有一些非常简单的笔尖,比如典型的MainWindow.nib,它没有本地化的内容,并且可以用一行代码进行复制。在这种情况下,代码比取消存档笔尖要快得多。

也有高度动态的布局,这是不可能描述为笔尖。

您应该在每个特定情况下选择最方便和有效的方式。总是会有权衡,只需明智地选择。

7

有很多原因可以在代码中创建视图。

  • 笔尖文件是延迟加载和某个导致明显缺乏反应的哪些用户不喜欢
  • 你不能在IB配置的一切,很多意见需要一些花哨的附加功能
  • 有时更容易只写你的看法跌多点击和拖动所有需要的东西一起
  • ...

我认为最重要的原因是缺乏性能和功能。

我正在使用笔尖文件,当我只想显示简单的按钮和标签和原型的简单信息。

11

我喜欢的代码最大的原因是它在源代码控制中有很好的差异。 XIB很难区分,合并和阅读。

代码也很容易复制/粘贴保存的代码片段。通过IB,我总是会忘记一些复选框,这让我想知道为什么这个魔术不起作用。我的笔记有代码片段。

什么IB真正擅长的是布局和帮助您与人类界面指南(控件之间的像素数量等...与guiedlines)。因此,我个人的偏好是IB中的布局和代码中的所有其他内容(包括目标,动作,添加列等等)。然而,在动态的情况下,IB崩溃了,你最终得到自定义视图。

这里有一个相关的职位:

Interface Builder (XIB) or Code when merging in a team environment?

9

有关于为什么要使用笔尖的原因很多,为什么你不应该。没有明确的答案,每个答案都取决于你需要做什么。除了Nib提供的明显优势(快速的UI创建过程,最小化.m文件中的视图构建代码)之外,它们提供了一些您无法找到的其他方式:解决本地化问题。在将您的应用程序本地化为其他语言的同时,您会遇到需要2-3个单词才能解释的短语和事物,而使用另一种语言只需要一个。当使用不同的本地化时,这严重地导致在视图控制器内放错视图的错误。所以,你可以在Xcode 4中为每个笔尖设置2-3个子笔尖,并按照你喜欢的方式将每个笔尖本地化,并将按钮和视图放置在正确的位置,而不用担心根据语言用户拥有。如果你要使用代码来完成所有这些工作,你应该把'if'放在任何地方,这当然是一种糟糕的编程习惯,并且容易出错。

我创建了一些视图控制器,如果我不使用界面构建器,只需要几百行来设置视图。因为每个NIB都是用HTML/XML编写的视图描述符,并且在创建任何视图之前,必须从磁盘读取文件并进行分析,因此NIB永远不会实现以编程方式创建视图的性能。笔尖也缺乏简单代码所具有的自定义选项(阴影,圆角和其他石英魔法)。这些自定义选项是不可用的,因为有很多方法可以通过代码实现相同的结果,或者通过与更高级别的Core Animation层进行交谈,或者直接寻址QuartCore和CGGraphics并在那里执行重要的东西,这当然更快,并且在大多数情况下推荐案例(使用图层的阴影可能非常慢)。所以苹果公司不希望将开发限制为绘制事物的特定方式。

NIBs的存在是有原因的。您必须确保在您的应用程序中了解创建NIB的原因。存在用于将代码连接到网点的便利,便于本地化,加速开发并清理代码。在一个项目中,你必须使用Nibs,但是你也必须避免在简单代码以最小或类似的努力给你相同的结果的地方使用它们。

最后但并非最不重要的是,考虑内存管理。使用Nib将影响IBOutlets等分配对象的释放。如果您的竞技场确定您创建的IBOutlet将在您想要时被释放,请不要使用NIB。改用普通的代码。

0

我会从xibs开始。一旦你完成了用户界面,然后将你的xib迁移到代码。这样你就可以得到两全其美的好处。 XIB可以很慢,我已经看到400KB XIBS(虽然很少见)。 XIBs肯定这些混沌,但...

1
A nib file is a special type of resource file that you use to store the user interfaces of iOS and Mac apps. A nib file is an Interface Builder document. You use Interface Builder to design the visual parts of your app—such as windows and views—and sometimes to configure nonvisual objects, such as the controller objects that your app uses to manage its windows and views. In effect, as you edit an Interface Builder document, you create an object graph that is then archived when you save the file. When you load the file, the object graph is unarchived. 

笔尖文件,因此对象图,可能包含用来指生活在其中的文件之外,但可能在对对象的引用对象的占位符对象文档或文档中的哪些对象可能具有引用。一个特殊的占位符是文件的所有者。

在运行时,使用方法loadNibNamed:owner:或其变体加载nib文件。文件的所有者是作为该方法的所有者参数传递的对象的nib文件中的占位符。当您在运行时加载文件时,无论您与Interface Builder中nib文件的文件所有者建立的连接都重新建立。

iOS使用笔尖作为支持故事板的实现细节,即iOS用户界面设计布局格式。故事板允许您在一个画布上设计和可视化应用程序的整个用户界面。对于iOS开发人员,使用故事板是设计用户界面的推荐方式。