【问题标题】:Objective c - Saving images in messaging app目标 c - 在消息传递应用程序中保存图像
【发布时间】:2012-05-31 16:15:17
【问题描述】:

我正在构建一个消息应用程序,用户当然可以互相发送短信,现在我想添加图片发送支持。

我有一个 NSManagedObject 子类 ChatMessage 来表示具有诸如 messageId、senderId、senderName、text、receiverId 等属性的聊天消息...

现在处理图像的最佳做法是什么?
我不是在谈论如何发送和接收图像,我是在谈论如何保存它们(当用户获取图像时以及用户上传和发送图像时)

将图像属性添加到ChatMessage 并使用Core Data 保存是个好主意吗?或者也许将其保存到单独的文件中?我需要在保存之前调整它们的大小吗?我在处理图像时应该会遇到特别的问题吗?

【问题讨论】:

标签: objective-c ios image core-data uiimage


【解决方案1】:

艾尔,

Core Data 可以很好地处理图像。特别是,在 iOS v5 和 Lion 中,大型 BLOB 存储在持久存储之外。小型 BLOB 仍存储在数据库中。有两个警告。首先,在 Core Data 中,创建保留周期非常容易,虽然这绝不是一件好事,涉及大型 BLOB 的保留周期会导致操作系统相对快速地杀死您的进程。因此,最佳实践是创建一个仅包含 BLOB 和反向链接的叶实体。这大大降低了您使用 BLOB 创建保留周期的可能性。我建议与 BLOB 的关系是一对一的关系。其次,大 BLOB 会导致内存警告。 Core Data 似乎不会将这些图像内存映射到 RAM 中。因此,它们不能轻易地从您的常驻内存集中自动清除。就我而言,我有一个让 CD 处理 BLOB 的应用程序。我还有一个应用程序,其中 BLOB 非常大(12-24 MB)。在后一种情况下,我自己处理 BLOB 存储和内存映射。

您是否调整图像大小实际上取决于您的应用程序和存储要求/限制。 CD 中的 BLOB 存储不会影响此问题。

安德鲁

【讨论】:

  • 感谢您的回答,我有两个问题,正如我所说的这是消息应用程序,用户可以将手机中的照片沙送给其他用户(相机胶卷中的照片或用户刚刚拍摄的照片)所以: 1. 我怎么知道这些图像的大小?用户从他的相机胶卷库上传的图片是否有大小限制? 2. 短信很小,所以没问题,但是现在我启用了图片,怕用户上传很多图片,这些图片会保存到设备,然后我会用完空间吗? ?
  • Eyal,Re: 1) 几乎总是有某种机制可以告诉您 BLOB 的大小。例如,NSData 会告诉你项目的大小。 2) 在任何应用程序中,您总是有可能耗尽存储空间。你只需要管理它。 Core Data 和操作系统都会在保存失败时告诉您。安德鲁
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-17
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多