2016-07-26 4 views
0

Я получаю статическую ошибку анализа, и я не уверен, можно ли ее безопасно игнорировать или я могу улучшить дизайн, чтобы удалить его без особого изменение, это устаревший код.Статический анализ предупреждает о том, что init не вызывается при загрузке из NSKeyedUnarchiver unarchiveObjectWithData

Это НЕ использует ARC.

-(id) initCustom{ 
    NSString* key = @"foo"; 

    NSData* objectData = nil; 
    objectData = [[NSUserDefaults standardUserDefaults] objectForKey:key]; 
    if(objectData != nil) 
    { 
     //If this path is taken the error occurs 
     self = [NSKeyedUnarchiver unarchiveObjectWithData:objectData]; 
    } 
    else 
    { 
     self = [super init]; 
    } 

    if (self) 
    { 
     //Static analysis warns here 
     m_fiz = [[NSString alloc] initWithString:@"bar"]; 
     //Instance variable used while 'self' is not set to the result of '[(super or self) init....]' 

    } 
} 

Я понимаю, что [NSKeyedUnarchiver unarchiveObjectWithData:objectData] заставит "initWithCoder" называться. Этот объект реализует NSCoding и имеет надлежащие методы, необходимые для использования NSCoding.

Является ли это ложным положительным результатом статического анализа, или я могу сделать его лучше?

ответ

0

Компилятор предупреждает, потому что это странный способ сделать это. :)

Переместить «читать по умолчанию или создать новую» логику в метод класса. Это позволит исправить сообщение о компиляторе и стать более последовательным.

+ (instancetype) defaultThingamahoover 
{ 
    ... check defaults database and unarchive ... 
    ... or return new .... 
} 

ОТВЕТСТВЕННОСТЬ: В общем, вы не хотите ничего толкнуть в базу данных по умолчанию. Это довольно нетипично, чтобы архивировать объект и вставлять его там. База данных по умолчанию обычно предназначена для небольших пар ключ/значение.

+1

Я согласен, но причудливые вещи происходят в устаревшем коде :) спасибо! – xceph

 Смежные вопросы

  • Нет связанных вопросов^_^