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

Rat*_*tan 58 cocoa interface-builder

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

Del*_*ani 85

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

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

  • xib代表xml接口构建器 (7认同)
  • 没问题; 乐于帮助.:) (2认同)

Luc*_*are 20

XIB文件是一个basicly的源文件NIB文件,XIB S能几乎总是在Xcode编辑(除非它们已经过时或损坏).虽然较新的NIB是压缩的并且是不可打开的,但较旧的NIB是可以通过Xcode查看的捆绑包,捆绑的NIB包含一些源/归档文件,其中包括designable.nib通常只是重命名的XIB文件.


NIB = Ñ XT 覆盖整个院落 uilder(NXT = NextStep自动= NS)

XIB = X毫升覆盖整个院落 uilder


虽然新的归档NIB文件对包括Xcode在内的大多数应用程序都无法打开,但它们仍然可能无法归档.我在CharlesSoft网站上找到了这个名为NibUnlocker的免费软件应用程序,它可以反汇编一个扁平的Nib文件并将其导出为XIB文档.这个应用程序仍然相当错误,但有时根据Nib的内容非常准确.

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


点击下载NibUnlocker


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

Nxt Interface Builder解剖:

NIB小号

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

有用的笔记

CFKeyedArchiverUID对象仅仅是一个重定向器,在{值= XX},该值是一个指数为在$ a项对象阵列(从阵列的开始).例如.<CFKeyedArchiverUID 0x60800002bc20 [0x7fffef6b8c30]>{value = 29},value = 29,结果将是$ object数组中的第29项(Just Remember the array from 0).在Objective C中,您可以使用以下方法从CFKeyedArchiverUID中检索此值:

+ (NSUInteger)valueForKeyedArchiverUID:(id)keyedArchiverUID {
  void *uid = (__bridge void*)keyedArchiverUID;
  NSUInteger *valuePtr = uid+16;
  return *valuePtr;}
Run Code Online (Sandbox Code Playgroud)

(我在使用互联网时发现了这一点,后来我使用Hopper来反汇编NibUnlocker,我在其源代码中注意到,它通过将NIB加载到NSDictionary并通过其所有连接,对象等来使用相同的技术.写出一个新的XIB)

如果这有帮助,哟打了我一个upvote ;-)


kar*_*agu 19

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

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


Voj*_*jto 13

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