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

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

可能是重复的问题 什么是 .NIB -> .XIB? - Suhaib
想知道xib是什么时候引入的吗?我也是!可能是在2007年10月至2008年7月之间,因为它是在XCode 3.1之间引入的。XCode版本来源XCode版本日期来源 - Ben Butterworth
5个回答

99
自从Interface Builder版本3推出以来,新增了一种文件格式(扩展名为.xib),其功能与.nib完全相同,但它存储在一个平面文件中,更适合存储在版本控制系统中并且可以被诸如diff之类的工具处理。

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


9
XIB是XML Interface Builder的缩写。 - GameLoading

32
"

XIB文件基本上是一个NIB文件的源文档,XIB文件通常可以在Xcode中进行编辑(除非它们已过时或损坏)。而新版的NIB文件是压缩的,无法打开,旧版的NIB文件是包文件,可以在Xcode中查看。打包的NIB文件包含一些源/存档文件,其中包括designable.nib,通常只是重命名的XIB文件。

"
NIB = Next Interface Builder (NXT = NextStep = NS) XIB = Xml Interface Builder

虽然包含新型档案格式的NIB文件无法在大多数应用程序(包括Xcode)中打开,但它们仍有可能被解压缩。我发现了一个叫做NibUnlocker 的免费软件,在CharlesSoft网站上可以把扁平的Nib文件拆分并导出为XIB文档。尽管该应用程序存在相当多的缺陷,但有时候根据Nib的内容,表现得还是非常准确的。

(NibUnlocker这个名字其实不太准确,Nibs并没有被锁住,而是被归档)


点击下载NibUnlocker


如果您希望了解更多相关内容,可以阅读我提供的以下有关NIB和XIB格式的附加信息: Nxt界面生成器解剖:

平面NIB

一个平面NIB文件是一个复杂的文件,但这并不是不可能分析。这些文件的结构只是苹果二进制属性列表(以“bplist00”开头),其中一些内容通过NSKeyedArchiver进行存档。由于一个NIB被格式化为属性列表,这允许小小的黑客:如果你实际上改变了一个平面Nib的扩展名为.plist,例如ArchivedNib.nib改为ArchivedNib.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。如果这对你有所帮助,请给我点个赞;-)

21

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

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


13

同时,当您编译项目时,.xib文件将会被编译成nib文件。


3

从功能上来说,xib只是一种友好的源代码控制格式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接