2

有几次在使用我的应用程序时,我在后台处理一些大数据。(当用户需要它时准备好。某种索引。)当这个后台进程完成时,它需要将数据保存在缓存文件中,但由于这真的很大,所以需要几秒钟。

但同时用户可能会打开一些显示从磁盘加载的图像和文本的对话框。如果在保存后台进程数据的同时发生这种情况,用户界面需要等待,直到保存过程完成。(这是不希望的,因为用户必须等待 3-4 秒才能加载磁盘中的图像和文本!)

所以我正在寻找一种限制写入磁盘的方法。我想把数据分成几块,并在保存不同的块之间插入一个短暂的延迟。在此延迟中,用户界面将能够加载所需的文本和图像,因此用户将无法识别延迟。

目前我正在使用[[array componentsJoinedByString:'\n'] writeToFile:@"some name.dic" atomically:YES]. 这是一个非常高级的解决方案,不允许任何定制。如何在没有大数据的情况下实现一个文件而不将所有数据保存为一次性?

4

2 回答 2

2

writeToFile:atomically: 会阻止异步读取吗?

不,这就像写入一个临时文件。成功完成后,将临时文件重命名为目标(如果存在,则替换目标中的预先存在的文件)。

你应该考虑如何分解你的数据,所以它不会那么慢。如果它全部按字符串/行划分并且需要几秒钟,那么划分数据库的简单方法是按第一个字符。当然,根据您访问、搜索和更新索引/数据库的方式,可能会想出更好的解决方案。

…在保存不同的块之间插入一个短暂的延迟。在此延迟中,用户界面将能够加载所需的文本和图像,因此用户将无法识别延迟。

不。只需自己实现原子写入的移动/替换(在索引和写入期间写入临时文件)。然后,您的应用程序可以显式序列化读取和写入命令,以便快速、一致和正确地访问这些共享资源。

于 2012-11-10T21:58:12.423 回答
1

您必须查看 NSFileHandle 类。使用 seekToEndOfFile 和 writeData:(NSData *)data 的组合,你可以做你想做的工作。

于 2012-11-10T17:57:26.033 回答