【问题标题】:What is the difference between NIB and XIB Interface Builder file formats?NIB 和 XIB Interface Builder 文件格式有什么区别?
【发布时间】:2011-04-13 04:30:48
【问题描述】:

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

【问题讨论】:

标签: cocoa interface-builder


【解决方案1】:

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

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

【讨论】:

  • 没问题;很高兴能帮助你。 :)
  • xib 代表 xml 界面生成器
【解决方案2】:

从功能上讲,xib 是一种源代码控制友好格式

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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


        NIB = Nxt I接口Buider (NXT = NextStep = NS)

        XIB = Xml I接口Buider


        尽管新归档的 NIB 文件无法对包括 Xcode 在内的大多数应用程序打开,但它们仍可能被取消归档。我在CharlesSoft 网站上发现了这个名为 NibUnlocker 的免费软件应用程序,它可以分解一个扁平的 Nib 文件并将其导出为 XIB 文件。此应用程序仍然存在相当多的错误,但根据 Nib 的内容,它有时非常准确。

        (NibUnlocker 是一个非常不准确的名称,Nib 未锁定它们已存档)


        Click to Download NibUnlocker


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

        Nxt 界面生成器剖析:

        扁平NIBs

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

        实用说明

        CFKeyedArchiverUID 对象只是一个重定向器,在 {value = xx} 中,值是 $objects 数组中项目的 index(从一开始的数组)。例如。 <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

        如果这有帮助,请给我点个赞 ;-)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-09-03
          • 2010-12-30
          • 2012-01-16
          • 1970-01-01
          • 2011-03-20
          • 2011-12-06
          • 2010-10-29
          相关资源
          最近更新 更多