保存或加载图像时 iPhone 设备的响应时间很慢

Posted

技术标签:

【中文标题】保存或加载图像时 iPhone 设备的响应时间很慢【英文标题】:Response time is very slow in iPhone device when saving or loading images 【发布时间】:2014-03-16 08:36:33 【问题描述】:

我在模拟器中尝试了我的应用程序,一切正常,但是当我在设备上尝试时,直到带来数据的响应时间非常慢..我该怎么办?原因是什么?

我意识到问题在于,在我的实体中,我有将图像存储为二进制数据的照片字段,当我将图像保存到核心数据或拉出图像以显示在表格视图中时,它需要很长时间。

图片另存为NSData的代码:

NSData *imageData = UIImagePNGRepresentation(_imageView.image); 

从核心数据中获取图像的代码:

cell.imageView.image = [UIImage imageWithData:[recipe valueForKey:@"image"]];

这会减慢我的加载和保存到核心数据的速度。从 Core Data 保存和加载图像的解决方案是什么?

【问题讨论】:

你能添加一些代码吗?至少显示您的 NSFetchRequest。 最好运行 Instruments 看看瓶颈在哪里。这些代码行压缩/解压缩 PNG。如果你的图片很大,那可能需要做很多工作。 【参考方案1】:

我能给的最好的建议如下

当您保存上下文时,请在后台线程中执行。您应该遵循NSManagedObjectContext 的线程限制规则。如果您面向 ios 5 设备,您还可以依赖新的 Core Data API。

使用允许外部存储标志。

如果您指定托管对象属性的值可能是 存储为外部记录,Core Data 启发式地决定一个 是否应该将数据直接保存在每个值的基础上 数据库或将 URI 存储到它为您管理的单独文件中。

在后台线程中获取和检索图像表示。完成后,抓住主线程并设置图像(例如Using Grand Central Dispatch for Asynchronous Table View Cells)。

我会先尝试前两步,然后再进行第三步。

【讨论】:

我发现了我的问题......因为我将图像保存为 PNG 并且图像很大,加载并将它们保存到核心数据需要时间。我使用以下方法将图像压缩到 JPAG:UIImageJPEGRepresentation(_imageView .image, 0.3) 并且工作正常。 我正在使用 Xcode 5.1,而您建议我的第二个选项未显示在我的图像属性上。我可以在 Xcode 5.1 中以其他方式进行操作吗?

以上是关于保存或加载图像时 iPhone 设备的响应时间很慢的主要内容,如果未能解决你的问题,请参考以下文章

UIWebview 在 iPhone 设备上很慢,在模拟器上很快

我的网站不会在 iPhone 上加载图像,但会在所有其他浏览器、移动设备或桌面设备上加载

应用程序在 iPhone5 上的照片中保存图像时崩溃,但在其他设备中运行良好

网站图像未从 Apple 设备 (Safari) 上的其他服务器加载

如何在核心数据中保存图像的引用(图像 URL 或路径)并在以后需要时加载?

iPhone使用唯一键加载和保存多个UIImages?