为什么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

08-05 22:01