![](/img/trans.png)
[英]Swift - NSKeyedUnarchiver unarchiveObjectWithData in NSMutableArray
[英]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.