为什么NSKeyedArchiver性能如此差?与使用NSArchiver相比,大小增加了一倍。
我正在用以下行编码对象的NSMutableArray
BOOL result = [NSArchiver archiveRootObject:self.appDataObject.materias toFile:archivePath];
NSMutableArray包含具有其相应的encodeWithCoder和initWithCoder的自定义对象
-(void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject: _fileName];
[aCoder encodeObject: _categoria];
[aCoder encodeObject: _materia];
[aCoder encodeObject: _nombre];
[aCoder encodeObject: _position];
[aCoder encodeValueOfObjCType:@encode(BOOL) at:&_favorite];
}
-(id)initWithCoder:(NSCoder *)aDecoder
{
if (self=[super init]) {
[self setFileName:[aDecoder decodeObject]];
[self setCategoria:[aDecoder decodeObject]];
[self setMateria:[aDecoder decodeObject]];
[self setNombre:[aDecoder decodeObject]];
[self setPosition:[aDecoder decodeObject]];
[aDecoder decodeValueOfObjCType:@encode(BOOL) at:&_favorite];
}
return self;
}
它工作正常,因为它可以正确保存文件,然后可以将其取消存档。它们大约有3000个对象,输出文件大约为 900kB
当我将归档行更改为:
BOOL result = [NSKeyedArchiver archiveRootObject:self.appDataObject.materias toFile:archivePath];
一切都神奇地工作但,文件大小增加了一倍以上,达到 2MB !
我为什么要问这个?因为我正在开发iOS应用程序,因此失去了对NSArchiver的支持。
最佳答案
您将获得向前和向后的兼容性。它是键控的,这意味着存档必须存储更多信息才能进行键控查找。在这里查看参考:Archives and Serialization