归档和取消归档是一项耗时的操作吗?

时间:2018-03-18 02:59:01

标签: objective-c nskeyedarchiver

当我们归档对象时,使用archiveRootObject。

归档和取消归档是一项耗时的操作吗?

[NSKeyedArchiver archiveRootObject:xxx toFile:filePath];

在一个帖子中。

dispatch_async(dispatch_get_global_queue(0, 0), ^{
    [NSKeyedArchiver archiveRootObject:xxx toFile: filePath]
});

我们什么时候需要使用线程来存档或取消存档?

1 个答案:

答案 0 :(得分:2)

archiveRootObject:toFile:分别做两件事:encodeRootObject和writeToFile。编码受CPU和内存限制。 writeToFile是IO绑定的。

如果图表中有很多对象,或者你有很多周期,那么

encodeRootObject可能会很慢。有一些"Performance Considerations" in the docs

将IO绑定操作(如writeToFile)移动到后台线程是一种常见做法,因为它通常可以减慢数量级,并且因为它没有保证(它可以减慢速度)取决于各种其他IO活动)。

通常,您应该使用Xcode Instruments Profiler来测量典型工作负载场景中的特定情况,并查看您的策略是否存在需要改进的问题。测量可能会让您感到惊讶,因为性能瓶颈可以在其他一些代码中找到。