使用.xib文件提供iPhone应用程序';什么是GUI?
我想知道在GUI设计中使用.xib文件和以编程方式这样做之间是否有区别 由于它是一个编译器,我会假设没有相关的时间损失使用.xib文件提供iPhone应用程序';什么是GUI?,iphone,objective-c,performance,nib,xib,Iphone,Objective C,Performance,Nib,Xib,我想知道在GUI设计中使用.xib文件和以编程方式这样做之间是否有区别 由于它是一个编译器,我会假设没有相关的时间损失 我错了吗?很少。也有一些例外。例如,如果使用xib将图像加载到UITableViewCell中,则这可能是一个问题,因为具有许多单元格的UITableViews对加载时间非常敏感。但是,无论出于何种目的,都不应该有明显的性能影响 xib中的信息确实必须在运行时解码并加载到内存中,这比直接以编程方式创建UI元素要慢。小心过早的优化,尤其是当它涉及到编写比需要多得多的代码时 (注意
我错了吗?很少。也有一些例外。例如,如果使用xib将图像加载到UITableViewCell中,则这可能是一个问题,因为具有许多单元格的UITableViews对加载时间非常敏感。但是,无论出于何种目的,都不应该有明显的性能影响
xib中的信息确实必须在运行时解码并加载到内存中,这比直接以编程方式创建UI元素要慢。小心过早的优化,尤其是当它涉及到编写比需要多得多的代码时 (注意:在我的手机上点击这个,所以我为任何奇怪的格式或语法提前道歉-如果有问题,我会在回到笔记本电脑前解决。) 我自己做了一些快速、肮脏、非常非正式的测试来验证这一点,以下是我的发现(请注意,我为测试构建的应用程序只是一个划痕,不一定代表“真实”的应用程序):
- 当初始屏幕为nib时,启动时间更快
- 对于所有后续屏幕,手动编写UI时,性能会提高
由于这个原因,我喜欢使用NIB来为应用程序奠定基础:任何顶级导航(选项卡控制器、导航控制器等),然后用手对其余的UI进行编码。
另外,由于iPhone的用户界面是如此特别,那么,iPhone(令人惊讶!),手工编写用户界面并不像编写桌面应用程序那样困难。你一遍又一遍地使用相同的UI组件——一旦你搞定了,在代码中快速创建UI就很容易了。您没有80亿个小部件可供选择,就像您开发Windows/OS X/任何应用程序一样。iPhone的一致性使它成为我多年来开发的手工编写UI的最简单平台 我还发现,当我手工编写UI时,NSCoding(我用于在应用程序运行期间保持状态)更容易使用。我遇到了一些问题,基于nib的屏幕由于UIImage实例而无法正确存档。UIImage(至少在我上次检查时)不符合NSCoding,因此归档过程将终止(这是一个相当令人不快的终止)。我在这里以UIImage为例,但是归档程序试图存储的任何不符合NSCoding的内容都会破坏这个过程,所以这是需要考虑的 还有一次,每当我使用动态表时,我总是手工编写UI。如果我要创建一个静态表,它的单元格基本上永远不会改变,那么NIB就可以了。对于任何其他类型的表,尤其是那些具有缩略图和其他资源密集型位的表,我在手动编码时获得的控制使您能够获得基于nib的表单元无法获得的性能。为此,您确实需要跳过CoCoatTouch并直接使用CoreGraphics,但您所能做的性能改进值得您编写的每一行代码。有关我参与过的项目的表格性能示例,请参阅Barnes and Noble商店(不是电子书阅读器)和Style.com。我们为这些(和其他)应用程序构建了一个框架,平滑表格滚动的秘密在于我们从未使用过从NIB加载的单元格(比这更复杂,但跳过NIB是获得这些应用程序性能的第一步) 一般来说,使用NIB时可能要考虑的最重要的事情是,需要通过文件打破UI。也就是说,不要把你的应用程序的整个用户界面粘在一个笔尖上。当一个nib被加载时,这就是全部——在nib中可能会有一个视图,你的用户很少看到,如果有的话,这些视图会像其他任何东西一样被加载,毫无理由地占用资源。如果你不为每个应用程序的屏幕使用单独的笔尖,很容易出现内存和性能问题 为了进一步澄清:如果你有一个有五个视图控制器的应用程序,请将每个控制器粘在自己的nib中。在需要之前,您不想加载任何内容。这也有例外,但这只是编码的方式——如果有足够的时间,你会找到“错误的方式”做某事的理由,但是a-nib-for-each-screen方法是你应该做的方式,除非你有充分的理由不这样做 我会把它放在那里的——我希望它能帮上一点忙 记住:- 我非正式的闲逛表明,用笔尖创业更快(只要你让笔尖尽可能简单,只保留你需要的东西)
- 启动后,手动编码UI的性能似乎有所提高
- 如果操作正确,如果您没有编写游戏或