2016-07-26 1 views
0

静的解析エラーが発生しましたが、安全に無視できるかどうか、または設計を改善して変更、これはレガシーコードです。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

関連する問題