Image caching is unlikely to belong to the presentation layer; nor does it retrieve these images from the server.
You should use the approach that you describe in your post-caching of images separately from the table, and then extract these images from this image cache.
You can create an ImageProvider class that will give you an image based on its key, and use this provider when building table cells. In turn, ImageProvider decides whether to download images from the server or load them from the cache, hiding details from the table view.
This approach gives you more flexibility: if you decide to save network traffic by copying images locally on the device, a separate cache approach will allow you to do this without violating the presentation level. It also allows you to save memory by flushing cached images to temporary files, for example, when you receive a low memory warning.
source share