繁体   English   中英

从NSuserDefaults取消存档数据的正确方法是什么?

[英]What is the correct way to unarchive data from NSuserDefaults?

我将一些基于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;
}

哪种方法正确?

两者有什么区别?

您不应该在方法中分配对象(分配发生在调用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;
}

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

暂无
暂无

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

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