繁体   English   中英

InitWithCoder,[super init]还是[super initWithCoder]?

[英]InitWithCoder, [super init] or [super initWithCoder]?

我可以问我应该使用哪个版本,在我的旧应用程序中,我似乎使用“B”但是当我在网上查看很多示例时,我看到很多版本看起来像“A”。

// A
- (id)initWithCoder:(NSCoder *)decoder {
    self=[super initWithCoder:decoder];
    if(self) {
        ...

要么

// B
- (id)initWithCoder:(NSCoder *)decoder {
    self=[super init];
    if(self) {
        ...

取决于超类是否符合NSCoding协议。 如果是,则必须调用[super initWithCoder:decoder] 如果没有,则必须调用超类的指定初始化程序。

例如,如果您的类是NSObject的直接子类,那么您将调用[super init]NSObject的指定初始化程序,因为NSObject不符合NSCoding协议。

如果超类采用NSCoding (可能并非总是如此),请始终调用

[super initWithCoder:decoder]

否则调用其指定的初始化程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM