谁能给我解释一下什么时候使用initWithNibName,什么时候使用initWithCoder?
发布于 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的全景。
发布于 2015-07-21 08:08:18
故事板
您应该首选-initWithCoder:而不是-initWithNibName,因为从Storyboard加载视图时仅调用前者。
发布于 2010-10-21 20:13:07
来自苹果文档的:
InitWithCoder对对象进行编码以进行存档。编码器通过调用encodeWithCoder:或initWithCoder:来指示对象这样做。encodeWithCoder:指示对象将其实例变量编码到提供的编码器...
InitWithNibName返回一个初始化到指定包中的nib文件的NSNib对象。加载nib文件后,NSNib对象使用包的资源映射来定位nib引用的其他资源。如果为捆绑包参数指定了nil,则NSNib对象将在与nib文件所有者的类关联的捆绑包中查找这些资源。如果nib文件没有所有者,NSNib对象将在应用程序的主包中查找其他资源。
前者用于对代码中的单个对象进行编码,后者用于检索包含资源对象的NSNib文件。
https://stackoverflow.com/questions/3986598
复制相似问题