NSArchiver 与 NSKeyedArchiver 性能

Ben*_*uan 5 iphone cocoa-touch objective-c nskeyedarchiver ios

为什么 NSKeyedArchiver 性能这么差?与使用 NSArchiver 相比,大小翻了一番。

我正在使用以下行编码对象的 NSMutableArray

BOOL result = [NSArchiver archiveRootObject:self.appDataObject.materias toFile:archivePath];
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

它工作正常,因为它正确保存了文件,然后我可以取消归档它。它们大约有 3000 个对象,输出文件大约为900kB

当我将归档行更改为:

BOOL result = [NSKeyedArchiver archiveRootObject:self.appDataObject.materias toFile:archivePath];
Run Code Online (Sandbox Code Playgroud)

一切都神奇地工作,文件大小增加了一倍多,达到2MB

我为什么要问这个?因为我正在开发一个 iOS 应用程序,因此失去了对 NSArchiver 的支持。

Ray*_*eck 1

您将获得向前和向后兼容性。它是带键的,这意味着存档必须存储更多信息才能进行带键查找。请参阅此处的参考:档案和序列化

  • 如果您不断查询 3000 个项目,您应该使用 CoreData 还是其他方法而不是将 3000 个项目保留在活动内存中? (2认同)