将图像保存到 NSUserDefault 有什么缺点?
What's the disadvantage of saving image to NSUserDefault?
与 Core Data 相比,将图像保存到 NSUserDefault 有什么缺点?
为什么在 NSUserDefault 中保存图像不是最佳做法?
我知道在 NSUserDefault 中保存数据是由 NSData 进行的。但它在核心数据中是一样的。那么与NSUserDefault和Core Data相比速度如何呢?
抱歉,我没有在此处提供代码。
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 还可以 自动执行 这一点,只需一个小技巧。通过为二进制数据属性启用 "Allows External Storage" 复选框,CoreData 会将图像存储在设备上的某个位置,并且只会保留对数据库中图像的引用(而不是实际图像),以保持性能高的。这是一些 more information about that.
与 Core Data 相比,将图像保存到 NSUserDefault 有什么缺点? 为什么在 NSUserDefault 中保存图像不是最佳做法?
我知道在 NSUserDefault 中保存数据是由 NSData 进行的。但它在核心数据中是一样的。那么与NSUserDefault和Core Data相比速度如何呢?
抱歉,我没有在此处提供代码。
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 还可以 自动执行 这一点,只需一个小技巧。通过为二进制数据属性启用 "Allows External Storage" 复选框,CoreData 会将图像存储在设备上的某个位置,并且只会保留对数据库中图像的引用(而不是实际图像),以保持性能高的。这是一些 more information about that.