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

时间:2011-07-25 18:09:28

标签: iphone objective-c cocoa-touch

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

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

OR

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

2 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分:12)

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

[super initWithCoder:decoder]

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