Как правильно разархивировать данные из NSuserDefaults? - PullRequest
0 голосов
/ 07 февраля 2012

Я храню некоторые объекты на основе 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;
}

Какой правильный путь?

Чторазница между этими двумя?

Ответы [ 2 ]

1 голос
/ 07 февраля 2012

Вы не должны распределять свой объект в методе (выделение происходит до вызова 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;
}
0 голосов
/ 07 февраля 2012

Это действительно не разница в реализации NSUserDefaults, разница в том, является ли ваш класс подклассом. Подклассы вызывают [super init] для получения свойств своих суперклассов (например, 2), в противном случае вы можете просто выделить и инициализировать пользовательский класс (например, 1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...