gpt4 book ai didi

iphone - NSArchiver 与 NSKeyedArchiver 性能对比

转载 作者:可可西里 更新时间:2023-11-01 06:12:16 30 4
gpt4 key购买 nike

为什么 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 的支持。

最佳答案

至于尺寸减小,我认为这与 NSKeyedArchiver 存储引用而不是实际值有关。

我比较了 NSKeyedArchiver 和 NSArchiver,以及一个基于 cocotron 的名为 NSKeylessArchiver 的新类(由于私有(private) API 状态,NSArchiver 在 iOS 上可能是禁区)。 NSKeylessArchiver 使用引用来减少具有重复字符串或对象的数据的大小,如果不需要 key ,它是更快的解码替代方案。

没有 child 和 20000 个整数的简单根对象的性能:

|                 |encoding (min/max/avg secs)|decoding (min/max/avg secs)|
|-----------------|:-------------------------:|:-------------------------:|
|NSKeyedArchiver | 0.2048/0.2453/0.2165 | 6.8919/6.9238/6.9037|
|NSKeylessArchiver| 0.0407/0.0506/0.0451 | 0.0253/0.0330/0.0287|
|NSArchiver | 0.0094/0.0114/0.0102 | 0.0019/0.0025/0.0020|

有关详细信息,请参阅 Github repoblog post .

关于iphone - NSArchiver 与 NSKeyedArchiver 性能对比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8806380/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com