分享
为什么问答平台  ›  专栏  ›  技术社区  ›  dontWatchMyProfile

为什么不使用XIB文件呢? - Good reasons why to not use XIB files?

  •  14
  • dontWatchMyProfile  · 技术社区  · 2 月前

    我为什么不使用具有高度定制的用户界面、大量动画和超低内存占用需求的XIB/NIB文件呢?

    作为一个初学者,我从XIB开始。然后我发现我不能只做其中的每一件事。我开始很难按照我想要的方式来定制东西。所以在最后,我把我所有的XIB都扔掉了,并以编程的方式完成了。

    所以当有人问我XIB是否好的时候,我通常会说:是的,如果你想做一些无聊的界面,而不太关心性能,那就继续吧。但是还有什么理由不使用XIB呢?

    难道只有我一个iPhone开发者因为这个原因而喜欢用程序来做每件事吗?

    6 回复  |  直到 6 年前
        1
  •  11
  •   mipadi    9 年前

    我认为InterfaceBuilder是Mac(以及iPhone)软件开发的最大资产之一。gui是可视的;为什么 使用可视界面创建它们?ib足够灵活,您可以使用它的“通用”组件来布局接口,然后在必要时对它们进行子类化。当然,如果您有一个独特的接口,那么您将不得不对视图类进行子类化并执行自定义绘图,但是您也可以在ib中对接口进行布局,然后轻松地使用inspector将类切换到自定义子类。

        2
  •  4
  •   Staros    9 年前

    老实说,我认为这是一种便利。如果你愿意用代码来写所有的东西,那就去写吧。如果您的项目设计得很好,那么创建新窗口等的工作量应该是相同的。但是我知道很多人对GUI世界都不太满意,所以NIB/XIB在那里工作得很好。

    老实说,我发现自己经常使用XIB作为基础,并用代码对它们进行编辑,以获得我想要的特定外观。个人偏好。

    对于这一点上的特定con,在从XIB加载视图之后,很难对其进行配置。当您在ib和代码之间有冲突的设置时,很难进行故障排除。

    这是一个问题。使用XIB对性能有什么影响?我认为它们是一个优势,因为在你需要它们之前它们不会被载入记忆。也就是说,加载时间更长,这会减慢程序的速度。思想?

        3
  •  3
  •   progrmr    9 年前

    我发现代码更好的一点是,对于控件上的事件连接,当您搜索方法(消息)的使用时,如果对它们进行了编码,则会找到它们;如果在ib中设置了它们,则不会找到它们。

    另一方面,在ib中,在视图上布置对象更容易,在ib中可以看到对象的大小和位置。当您在代码中这样做时,您必须猜测大小和原点设置,然后运行它并进行调整,然后再次运行它以查看它是什么样子的。

        4
  •  3
  •   Rubén T.F.    7 年前

    当应用程序具有某种“标准”视图时,请使用XIB。如果您需要真正的定制,根据外部内容(XML…)进行编程。

    我开始使用XIB,现在都是代码,我觉得这样更舒服。我对XIB有实际的问题,现在用代码编写接口真的节省了我的时间。

        5
  •  2
  •   RickiG    8 年前

    我在启动阶段处理uicontrollers(uitabarcontrollers、uinavigationcontrollers等)时节省了大量的时间,所有的导航设备都连接在一起。

    我只是用一个附带的XIB构建了X视图控制器,添加了IB、标签、图像等所需的东西。这意味着对于几乎任何类型的应用程序,您都可以在几个小时内获得概念验证。这足以证明花些时间学习ib的进进出出。特别是在iPhone上,你可以有很多好的用户界面想法,但当它们从模拟器移动到实际设备时,都会失败。

    在我看来,最好的办法是平衡一下,如果你发现自己花了很多时间来做“更改第3帧px->编译->ahh.”还需要两个像素->更改2像素-编译->ahh..再加一个px“,对于在ib中可以做的事情,你将开始严重浪费时间。

    我从上面开始,但后来我经常为了定制的东西而扔掉XIB。诀窍是不要花很多时间反复地在代码中实现自定义内容的版本,而是弄清楚它应该是怎样的,并且只做一次自定义内容:)

        6
  •  2
  •   ma11hew28    6 年前

    NIB文件的XML内容非常复杂。这使得查看更改或修复与版本控制系统(如Git)的合并冲突变得非常困难。

    接口生成器是个不错的主意,但是 Bret Victor 在他的谈话中 Inventing on Principle “还有他的文章” Learnable Programming “暗中挑战苹果打造更好的IDE。

    一个想法,基于布雷特·维克托的原则:如果我可以在iOS模拟器应用程序中选择一个“移动工具”,让我在应用程序中移动一个按钮,然后在实现中更改框架代码,该怎么办?( .m )文件?这样会更好。