The two main options, as you said (and mentioning in this OS question ), are:
Save the file to disk and save the path to the image in Core Data.
Save the binary image file in Core Data.
I need to say that I agree with Dave DeLong and I think the # 1 it is best to allow lazy loading
of the image.
An example of interesting use is to save the URL to the image in Core Data and the first time this image is requested it is locally cached and this URL is replaced by the path of the image.
Another solution I've seen implemented when there is a business rule of how long the image should remain cached is to save the URL to it and include a
lastUsed
field, it is downloaded and saved locally and after that pre- should be downloaded again. This solution minimizes the space used and at the same time keeps the most used images available.
If you choose # 2 at a Core Data Programming Guide and the question Core Data iPad / iPhone BLOBS vs. File system for 20k PDFs .