任何人都可以解释我何时使用initWithNibName以及何时使用initWithCoder?
initWithNibName:通常与视图控制器对象一起使用.这个想法是你有一个NIB文件(或XIB,同样的东西),你已经在Interface Builder中设计了UIView(或NSView).当您的视图控制器启动时,它具有view您必须自己绘制的属性和插座 - 除了您已经在IB中设计它.因此,此构造函数允许您启动新的控制器对象,并告诉它在哪个NIB文件中查找其视图.讨论连接NIB本身以确保成功是有点超出这里的主题.
initWithCoder:完全有另一项任务.当您使用序列化对象时encodeWithCoder:,最终需要反序列化(或"解码")该数据以将其转换回类的对象.
总之,回顾一下:你会实现encodeWithCoder:,并initWithCoder:仅如果你想你的对象支持类NSCoding协议.initWithNibName:当您想要启动一个可以使用NIB文件中存档的对象初始化其属性的对象时,您可以使用(通常不自己实现).
有一个真正伟大的超图NSCoding 在这里.
来自苹果的文档:
\n\nInitWithCoder 对对象进行编码以进行归档。编码器通过调用encodeWithCoder:或initWithCoder:来指示对象这样做。encodeWithCoder:指示对象将其实例变量编码为提供的编码器...
\n\nInitWithNibName 返回一个初始化为指定包中 nib 文件的 NSNib 对象。加载 nib 文件后,NSNib 对象使用 bundle\xe2\x80\x99s 资源映射来定位 nib 引用的其他资源。如果您为bundle参数指定nil,则NSNib对象会在与nib文件\xe2\x80\x99s所有者的类关联的bundle中查找那些资源。如果 nib 文件没有所有者,则 NSNib 对象会在 application\xe2\x80\x99s 主包中查找其他资源。
\n\n前者用于编码代码中的单个对象,后者用于检索包含资源对象的 NSNib 文件。
\n| 归档时间: |
|
| 查看次数: |
3884 次 |
| 最近记录: |