2012-02-07 4 views
0

Я хранил некоторые объекты на основе Objective C в NSuserdefaults.Каков правильный способ удаления данных из 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; 
} 

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

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

ответ

0

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

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; 
} 
+0

initWithCoder является участником протокола NSCoding. NSObject не реализует NSCoding (вы должны явно объявить его для своего собственного класса), поэтому вы не можете вызвать [super initWithCoder: decorder] из класса, непосредственно полученного из NSObject. – interrupt