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

fuz*_*oat 12 iphone cocoa-touch objective-c

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

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

要么

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

alb*_*amg 13

取决于超类是否符合NSCoding协议.如果是,你必须打电话[super initWithCoder:decoder].如果没有,则必须调用超类的指定初始值设定项.

例如,如果你的类是直接的子类NSObject,你会叫[super init],NSObject的指定初始化,因为NSObject不符合NSCoding协议.


Bol*_*ock 12

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

[super initWithCoder:decoder]
Run Code Online (Sandbox Code Playgroud)

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