0

我将一些基于 Objective C 的对象存储到 NSuserdefaults 中。

为了从 NSuserDefaults 中检索数据,我使用了 initWithCoder 方法。

我已经看到了两种不同的实现:

实施1

- (id)initWithCoder:(NSCoder *)decoder {

     self = [super init];
    if (self != nil){

        //decode properties, other class vars
        self.variable = [decoder decodeObjectForKey:@"variable"];



    }
    return self;
}

实施 2

- (id)initWithCoder:(NSCoder *)decoder {

     self = [[CustomClass alloc] init];
    if (self != nil){

        //decode properties, other class vars
        self.variable = [decoder decodeObjectForKey:@"variable"];



    }
    return self;
}

哪个是正确的方法?

这两者有什么区别?

4

2 回答 2

1

您不应该在方法中分配对象(分配发生在调用 init/initWithCoder 之前)。您的代码应如下所示:

- (id)initWithCoder:(NSCoder *)decoder {
    self = [super initWithCoder:decoder];
    if (self != nil){
        //decode properties, other class vars
        self.variable = [decoder decodeObjectForKey:@"variable"];
    }
    return self;
}
于 2012-02-07T08:29:36.133 回答
0

这真的不是 NSUserDefaults 实现的区别,你的类是否是子类的区别。子类调用 [super init] 来获取其超类的属性(例如 2),否则您可以分配并初始化自定义类(例如 1)。

于 2012-02-07T08:18:42.217 回答