首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >initWithNibName与initWithCoder的区别

initWithNibName与initWithCoder的区别
EN

Stack Overflow用户
提问于 2010-10-21 18:47:32
回答 3查看 4K关注 0票数 8

谁能给我解释一下什么时候使用initWithNibName,什么时候使用initWithCoder?

EN

回答 3

Stack Overflow用户

发布于 2010-10-21 20:58:18

initWithNibName:通常与视图控制器对象一起使用。这个想法是,你有一个NIB文件(或XIB,同样的东西),它有一个你已经在Interface Builder中设计的UIView (或NSView)。当视图控制器启动时,它有一个view属性和出口,您必须自己绘制这些属性和出口--除非您已经在IB中设计了它。因此,此构造函数允许您启动新的控制器对象,并告诉它在哪个NIB文件中查找其视图。关于连接NIB本身以确保成功的讨论有点超出了这里的主题。

initWithCoder:完全有另一个任务。当您使用encodeWithCoder:序列化了一个对象后,您最终将需要对该数据进行反序列化(或“解码”),以将其转换回您的类的对象。

总之,回顾一下:只有当您希望对象支持NSCoding协议时,才会在您的类上实现encodeWithCoder:initWithCoder:。当您想要启动一个可以用NIB文件中存档的对象初始化其属性的对象时,可以使用initWithNibName: (通常不是您自己实现它)。

从这里可以看到NSCoding over here的全景。

票数 6
EN

Stack Overflow用户

发布于 2015-07-21 08:08:18

故事板

您应该首选-initWithCoder:而不是-initWithNibName,因为从Storyboard加载视图时仅调用前者。

票数 3
EN

Stack Overflow用户

发布于 2010-10-21 20:13:07

来自苹果文档的

InitWithCoder对对象进行编码以进行存档。编码器通过调用encodeWithCoder:或initWithCoder:来指示对象这样做。encodeWithCoder:指示对象将其实例变量编码到提供的编码器...

InitWithNibName返回一个初始化到指定包中的nib文件的NSNib对象。加载nib文件后,NSNib对象使用包的资源映射来定位nib引用的其他资源。如果为捆绑包参数指定了nil,则NSNib对象将在与nib文件所有者的类关联的捆绑包中查找这些资源。如果nib文件没有所有者,NSNib对象将在应用程序的主包中查找其他资源。

前者用于对代码中的单个对象进行编码,后者用于检索包含资源对象的NSNib文件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3986598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档