Interface Builder文件中nib和xib有什么区别?
答案 0 :(得分:85)
从Interface Builder版本3开始,添加了一个新的文件格式(扩展名为.xib),它在功能上与.nib相同,只是它存储在一个平面文件中,使其更适合存储在版本控制中系统和处理工具,如差异。
答案 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没有锁定它们被存档)
如果您想了解更多信息,可以阅读我在下面提供的有关 NIB 和 XIB 格式的其他信息:
Nxt Interface Builder Anatomy:
扁平 NIB s
Flat 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;}
如果这有帮助的话,你会用一个upvote打我; - )(我发现自己使用互联网,后来我用Hopper来反汇编NibUnlocker,我注意到在源代码中,它通过加载 NIB使用相同的技术进入 NSDictionary 并浏览其所有连接,对象等..并写出新的 XIB )
答案 3 :(得分:13)
此外,当您编译项目时,.xib文件将被编译为nib。
答案 4 :(得分:3)
功能上除了xib之外什么都不是源代码控制友好格式