Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa NIB和XIB接口生成器文件格式之间的区别是什么?_Cocoa_Interface Builder - Fatal编程技术网

Cocoa NIB和XIB接口生成器文件格式之间的区别是什么?

Cocoa NIB和XIB接口生成器文件格式之间的区别是什么?,cocoa,interface-builder,Cocoa,Interface Builder,在Interface Builder文件中,nib和xib之间有什么区别 从Interface Builder版本3开始,添加了一种新的文件格式(扩展名为.xib),其功能与.nib相同,只是它存储在一个平面文件中,使其更适合存储在版本控制系统中,并通过diff等工具进行处理 从功能上讲,除了xib是一种源代码管理友好的格式外,其他什么都没有。编译项目时,.xib文件将被编译到nib中 xib是平面文件,而不是捆绑文件。这使得SCM(源代码管理)系统更容易处理。当你编译你的应用程序时,XIB被编

在Interface Builder文件中,nib和xib之间有什么区别

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


从功能上讲,除了xib是一种源代码管理友好的格式外,其他什么都没有。

编译项目时,.xib文件将被编译到nib中

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


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

XIB文件基本上是一个NIB文件的源文档,XIB几乎总是可以在Xcode中编辑(除非它们过时或腐败)。虽然较新的NIBs是压缩的且不可修复的,但较旧的NIBs是可以通过Xcode查看的捆绑包,捆绑的NIBs包含一些源/存档文件,其中包括
可设计的.NIB
,通常只是重命名的XIB文件


NIB=NxtIinterfaceBuilder(NXT=NextStep=NS)

XIB=XmlIinterfaceBuilder


虽然新存档的NIB文件对包括Xcode在内的大多数应用程序来说都是不可修复的,但它们仍然有可能是未存档的。我在网站上发现了一个名为NIUNLOCKER的免费应用程序,它可能会分解一个平面NIB文件并将其导出为XIB文件此应用程序仍然有相当多的缺陷,但根据Nibs内容,它有时非常准确

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



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

Nxt接口生成器剖析:

扁平NIBs

平面NIB文件是一个需要分析的复杂文件,但这并非不可能。这些文件的结构只是一个apple二进制属性列表(以“bplist00”开头)由于NIB被格式化为属性列表,这就允许了一个小技巧:如果你真的将平面NIB的扩展名改为.plist,例如
ArchivedNib.NIB
改为
ArchivedNib.plist
,你实际上可以在Xcode视图i中打开它将其设置为属性列表,尽管并非所有的值都会显示,因为Xcode不知道如何显示某些值(CFKeyedArchiverUID值)。当您将Nib视为属性列表时,可能会获得一些基本属性,如$version、$objects、$archiver和$top

有用的注释

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

(我自己在互联网上发现了这一点,后来我习惯于反汇编,我注意到在其源代码中,它使用了相同的技术,将NIB加载到NSDictionary中,并检查其所有连接、对象等,然后写出一个新的XIB


如果这有帮助的话,你给了我一个向上的一票;-)

没问题;很乐意帮忙。:)xib是xml接口构建器的代表,可能是想知道何时引入xib的重复?我也是!可能在2007年10月至2008年7月之间,因为它是在XCode 3.1之间引入的,
+ (NSUInteger)valueForKeyedArchiverUID:(id)keyedArchiverUID {
  void *uid = (__bridge void*)keyedArchiverUID;
  NSUInteger *valuePtr = uid+16;
  return *valuePtr;}