Skip to content
DeveloperMemos

Caching Some Data with NSCache

iOS, Swift, Caching1 min read

Caching involves storing data in a temporary storage space so that subsequent requests for that data can be served faster. Typically, this is achieved by keeping a copy of the data in a location that is quicker to access than the primary storage area. By doing so, applications can minimize the need to repeatedly fetch the same data from slower sources, such as databases or network endpoints.

Introducing NSCache

In the world of iOS development, NSCache is a class provided by Apple that offers an in-memory caching system. Unlike a traditional Swift dictionary, NSCache is designed to automatically evict objects if the system is running low on memory. This makes it an ideal choice for temporarily storing resources, particularly when the precise amount of memory used by these resources may vary.

Using NSCache for Data Caching

Let's consider an example of how NSCache can be utilized for caching data in an iOS application. Assume we have a scenario where we frequently retrieve and display images from URLs. We can employ NSCache to store these images temporarily, avoiding redundant network requests and enhancing the user experience by ensuring swift image loading.

1let imageCache = NSCache<NSString, UIImage>()
2
3func loadImage(with url: URL, completion: @escaping (UIImage?) -> Void) {
4 if let cachedImage = imageCache.object(forKey: url.absoluteString as NSString) {
5 completion(cachedImage)
6 } else {
7 URLSession.shared.dataTask(with: url) { data, response, error in
8 guard let data = data, let image = UIImage(data: data) else {
9 completion(nil)
10 return
11 }
12 self.imageCache.setObject(image, forKey: url.absoluteString as NSString)
13 completion(image)
14 }.resume()
15 }
16}

In this example, imageCache is an instance of NSCache that stores images retrieved from URLs. When attempting to load an image, the function first checks the cache. If the image is present in the cache, it is immediately returned to the caller, bypassing the need for a network request. Otherwise, the image is fetched from the URL, stored in the cache, and then returned to the caller. This simple yet effective use case demonstrates the power of NSCache in optimizing data retrieval and display.

By incorporating NSCache into your projects, you can effectively manage the storage and retrieval of frequently used data, all while optimizing the performance of your iOS applications.