我有一个数据库对象和一些照片对象。
数据库对象包含一个整数属性和一个可变字典属性。
当我创建一个新的照片对象并且可变字典包含指向照片对象的指针时,整数会跟踪下一个用作可变字典键的空闲数字。
照片对象包含图像、图像描述和图像拍摄日期。
当我的 applicationDidBecomeActive 和 applicationWillResignActive 方法触发时,我一直在使用 NSKeyedUnarchiver 和 NSKeyedArchiver 来读写这些对象。
而且,这一切都运作良好。当 applicationWillResignActive 触发时,它调用 NSKeyedArchiver 并将其指向作为根的数据库对象。然后编码器写出整数,然后当它遇到可变字典时,它会下降到其中并调用每个照片对象以保存其属性,即图像、描述和日期。
正如我所说,一切都运行良好。但是,随着照片数量的增加,它似乎越来越慢,所以我做了一些计时。
我发现读入档案比写出档案快大约 25 倍。
所以,我想到了只写出新的或改变的照片作为加快写入速度的方法。毕竟,大部分照片都是过去的照片,我可能有 30 或 50 张以前的照片,而这次我可能只拍两三张新照片。
我创建了一些标志来指示照片是新的还是旧的。当 applicationWillResignActive 触发并且我发现自己处于处理每个 encodeWithCoder 调用的照片对象中时,如果照片是新的,我会保存图像、描述和日期,如果是旧的,我会跳过保存。
好吧,我没有得到我希望的结果:-)
当 applicationWillResignActive 触发时,我跳过写出的所有照片最终都会被写为空的照片对象,它会用相同的键覆盖以前的照片对象。然后,当我重新加载它们时,我有 bupkis、nada、zip。
第一个问题,我想,我是否可以只写出我的对象树的一部分,而我没有写出的部分仍然完好无损地保留在前面的完整写中?我开始怀疑这是否是一个幼稚的想法。
加里蒙