将图像保存到NSUserDefault有什么缺点?

时间:2016-08-07 10:43:36

标签: ios objective-c swift nsuserdefaults

与Core Data相比,将图像保存到NSUserDefault的缺点是什么? 为什么在NSUserDefault中保存图像不是最佳做法?

我知道在NSUserDefault中保存数据是由NSData提供的。但核心数据也是如此。那么与NSUserDefault和Core Data相比速度如何?

很抱歉,我这里不提供代码。

1 个答案:

答案 0 :(得分:3)

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