我制作的应用程序具有植物的集合视图。我有实现NSCoding协议的Plant类,所以我可以保存它们。植物存储在名为plantList的数组中。
var plantList = [Plant]
以下是我在Plant类中存储的内容:
class Plant: NSObject, NSCoding {
var name: String
var species: String
var nextWateredDate: Date
var wateringPeriod: Int
var wateringCount: Int
var profileImage: UIImage?
每当将工厂添加到plantList或编辑工厂时,我都会像这样保存plantList:
func savePlants() {
NSKeyedArchiver.archiveRootObject(plantList, toFile:
Plant.ArchiveURL.path)
}
我的问题是,当我的plantList中有多个工厂时,savePlants()需要很长时间才能完成。不确定如何继续前进,核心数据等不同的持久存储方法会更快吗?在我的Plant类中存储UIImage的数据太多了吗?
答案 0 :(得分:0)
NSCoding是一种对象序列化技术。选择取决于您的缓存数据。如果你的缓存是一堆对象,我当然会选择NSCoding,因为它很容易使用。 NSCoding与NSKeyedArchiver一起存储数据的好方法对NSUserDefaults来说太大了,但对于CoreData来说太小而且数量太多。
另一方面,如果您想优化此代码,我建议您更改保存图像名称而不是保存整个图像以保持持久性。将图像保存在应用程序文档的目录中(当然使用相同的名称),并在使用您解码的名称完成解码后获取它。我认为这可能会给你带来很好的表现。