iphone - initWithNibName 和 initWithCoder 之间的区别

标签 iphone

谁能解释一下何时使用 initWithNibName 以及何时使用 initWithCoder?

最佳答案

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

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

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

NSCoding 有一个非常棒的概述 over here

关于iphone - initWithNibName 和 initWithCoder 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3986598/

相关文章:

javascript - Jquery mobile Click 事件未触发

ios - iOS中是否可以查看 "connected network"的信息

iphone - iOS MKMapView 缩放以显示所有标记

iphone - Objective-C:为什么@synthesize 预见到一个赋值?

iphone - 以给定的频率闪烁 iphone ipad 的屏幕

iphone - TabBar 仍然可点击

iphone - IOS5 中的本地通知 - 如何让它在屏幕上弹出而不是在通知中心?

ios - Swift-无法使用 SpriteKit 呈现 Game Center

iphone - EKEventEditViewActionDeleted 在删除事件时多次调用

ios - 此 iPhone 6 运行的是 iOS 12.4.1 (16G102),该版本的 Xcode 可能不支持