0

Objective C ベースのオブジェクトを NSuserdefaults に保存しています。

NSuserDefaults からデータを取得するには、initWithCoder メソッドを使用します。

私はこれの2つの異なる実装を見てきました:

実装 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;
}

正しい方法はどれですか?

これら2つの違いは何ですか?

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 に答える