NIB和XIB Interface Builder文件格式有什么区别?

时间:2010-09-16 11:58:23

标签: cocoa interface-builder

Interface Builder文件中nib和xib有什么区别?

5 个答案:

答案 0 :(得分:85)

  

从Interface Builder版本3开始,添加了一个新的文件格式(扩展名为.xib),它在功能上与.nib相同,只是它存储在一个平面文件中,使其更适合存储在版本控制中系统和处理工具,如差异。

http://en.wikipedia.org/wiki/Interface_Builder#Design

答案 1 :(得分:19)

XIB是平面文件而不是捆绑包。这使得SCM(源代码管理)系统更容易处理。编译应用程序时,XIB将编译为NIB文件以包含在您的应用程序中。

应用程序包中包含的已编译NIB在Interface Builder中不再可编辑,并且比等效的XIB或旧版NIB文件小得多。

答案 2 :(得分:17)

XIB 文件基本上是 NIB 文件的源文档, XIB 几乎总是可以在Xcode 中编辑(除非他们过时或腐败)。虽然较新的 NIB 是压缩且无法打开的,但较旧的 NIB 是捆绑包,可由Xcode查看,捆绑的 NIB 包含一些源/归档文件,其中包含designable.nib,通常只是重命名的 XIB 文件。

  

NIB = N xt nterface B uilder(NXT = NextStep = NS)

     

XIB = X ml nterface B uilder

虽然新的归档 NIB 文件对包括Xcode在内的大多数应用程序都无法打开,但它们仍然可能无法归档。我发现这个名为 NibUnlocker 的免费软件应用程序在CharlesSoft网站上可能会拆解平面的 Nib 文件并将其导出为< strong> XIB 文档。此应用程序仍然相当错误,但有时根据 Nib 的内容非常准确。

(NibUnlocker是一个非常不准确的名字,Nibs没有锁定它们被存档)

Click to Download NibUnlocker

如果您想了解更多信息,可以阅读我在下面提供的有关 NIB XIB 格式的其他信息:

  

Nxt Interface Builder Anatomy:

     

扁平 NIB s

     

Flat NIB文件是要分析的复杂文件,但这并非不可能。这些文件的结构只是一个苹果二进制属性列表(以“bplist00”开头),其中一些内容通过NSKeyedArchiver存档。由于 NIB 被格式化为属性列表,因此允许小的黑客:如果您实际上将平面 Nib 的扩展名更改为.plist,例如。 ArchivedNib.nibArchivedNib.plist您实际上可以在Xcode中将其打开,将其视为属性列表,但不会显示所有值,因为Xcode不知道如何显示某些值(CFKeyedArchiverUID值) )。当您将 Nib 视为属性列表时,您可能会获得一些基本属性,例如$ version,$ objects,$ archiver和$ top。

     

实用笔记

     

CFKeyedArchiverUID 对象只是一个重定向器,在{value = xx}中,值是$ objects数组中项目的索引(从一开始的数组)。例如。 <CFKeyedArchiverUID 0x60800002bc20 [0x7fffef6b8c30]>{value = 29},value = 29,结果将是$ object数组中的第29项(请记住,数组以0开头)。在Objective C中,您可以使用以下方法从CFKeyedArchiverUID中检索此值:

+ (NSUInteger)valueForKeyedArchiverUID:(id)keyedArchiverUID {
  void *uid = (__bridge void*)keyedArchiverUID;
  NSUInteger *valuePtr = uid+16;
  return *valuePtr;}
  

(我发现自己使用互联网,后来我用Hopper来反汇编NibUnlocker,我注意到在源代码中,它通过加载 NIB使用相同的技术进入 NSDictionary 并浏览其所有连接,对象等..并写出新的 XIB

如果这有帮助的话,你会用一个upvote打我; - )

答案 3 :(得分:13)

此外,当您编译项目时,.xib文件将被编译为nib。

答案 4 :(得分:3)

功能上除了xib之外什么都不是源代码控制友好格式