与核心数据相比,将图像保存到NSUserDefault有什么缺点?为什么在NSUserDefault中保存图像不是最佳实践呢?
我知道在NSUserDefault中保存数据是通过NSData进行的。但在核心数据方面是一样的。那么,与NSUserDefault和核心数据相比,速度如何呢?
很抱歉我这里不提供密码。
发布于 2016-08-07 03:36:21
NSUserDefaults
显式地用于存储用户默认值--图像不属于那里,特别是因为NSUserDefaults将信息写入.plist文件。原始图像数据不属于.plist文件。除此之外,它也不是很有效:您在.plist文件中存储的信息越多,加载它所需的时间就越长。如果要加载特定的映像,则必须加载整个.plist文件--包括当前不需要的所有其他映像。简单地说:不做。
存储图像的一种更合适、更有效的方法是将它们存储在应用程序的文档目录中--它们属于哪个目录。
你可以这样做:
存储图像
func saveImage(image: UIImage, fileName: String) {
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
let path = documentsURL?.appendingPathComponent(fileName)
do {
try UIImagePNGRepresentation(image)?.write(to: path!)
} catch {
// Handle possible errors here
print(error.localizedDescription)
}
}
调用您的saveImage
函数
let theImage = UIImage(named: "yourImage")
saveImage(image: theImage!, fileName: "yourImageName")
将图像存储到应用程序的文档目录后,可以获取图像的文件路径并将其存储在CoreData数据库中,以便稍后检索图像。
CoreData也可以通过一个小技巧为您自动完成这一任务。通过为二进制数据属性启用“允许外部存储”复选框,CoreData将将图像存储在设备的某个位置,并且只会在数据库中保留对图像的引用(而不是实际的映像),以保持高性能。这是一些more information about that。
https://stackoverflow.com/questions/38813307
复制相似问题