Eyal
Eyal

Reputation: 10818

Objective c - Saving images in messaging app

I'm building a messaging app, users of course can send text messages to each other, and now I want to add images sending support.

I have a NSManagedObject subclass ChatMessage to represent a chat message with properties like messageId, senderId, senderName, text, receiverId...

Now what is best practice to deal with the images?
I'm not talking about how to send and receive images, I'm talking about how to save them (when user get an image and when user upload and send an image)

Is it a good idea to add an image property to ChatMessage and save it with Core Data? or maybe save it to separate file? Do I need to resize them before saving? Should I expecte to have particular problems when I deal with images?

Upvotes: 0

Views: 221

Answers (1)

adonoho
adonoho

Reputation: 4339

Eyal,

Core Data handles images well. In particular, in iOS v5 and Lion large BLOBs are stored outside of the persistent store. Small BLOBs are still stored in the DB. There are two caveats. First, in Core Data, it is very easy to create retain cycles, while this is never a good thing, a retain cycle involving large BLOBs will cause the OS to relatively quickly kill your process. As a result of this, the best practice is to create a leaf entity that just holds the BLOB and the inverse link. This makes it much less likely that you will create a retain cycle with the BLOB. I recommend that the relation to the BLOB be a to-one relationship. Second, large BLOBs cause memory warnings. Core Data does not appear to memory map these images into RAM. Hence, they cannot easily be automatically purged from your resident memory set. In my case, I have an app where I let CD handle the BLOBs. I also have an app where the BLOBs are quite large (12-24 MB). In the latter case, I handle the BLOB storage and memory mapping myself.

Whether you resize an image is really dependent upon your application and storage requirements/limitations. BLOB storage in CD doesn't affect this issue.

Andrew

Upvotes: 2

Related Questions