繁体   English   中英

从NSKeyedUnarchiver unarchiveObjectWithData加载时,静态分析警告未调用init

[英]Static analysis warns of init not called when loading from 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实现。

这是从静态分析得出的误报,还是我可以做得更好?

编译器发出警告,因为这是一种奇怪的方法。 :)

将“从默认值读取或创建新的”逻辑移到类方法中。 这样既可以修复编译器警告消息,又可以使模式更一致。

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

顺便说一句:通常,您不希望将任何大数据推入默认数据库。 归档对象并将其粘贴在其中非常不典型。 默认数据库通常用于较小的键/值对。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM