URLCache
An object that maps URL requests to cached response objects.
Declaration
class URLCacheMentioned in
Overview
The URLCache class implements the caching of responses to URL load requests, by mapping NSURLRequest objects to CachedURLResponse objects. It provides a composite in-memory and on-disk cache, and lets you manipulate the sizes of both the in-memory and on-disk portions. You can also control the path where cache data is persistently stored.
Thread safety
In iOS 8 and later, and macOS 10.10 and later, URLCache is thread safe.
Although URLCache instance methods can safely be called from multiple execution contexts at the same time, be aware that methods like cachedResponse(for:) and storeCachedResponse(_:for:) have an unavoidable race condition when attempting to read or write responses for the same request.
Subclasses of URLCache must implement overridden methods in such a thread-safe manner.
Subclassing notes
The URLCache class is meant to be used as-is, but you can subclass it when you have specific needs. For example, you might want to screen which responses are cached, or reimplement the storage mechanism for security or other reasons.
When overriding methods of this class, be aware that methods that take a task parameter are preferred by the system to those that do not. Therefore, you should override the task-based methods when subclassing, as follows:
Storing responses in the cache — Override the task-based storeCachedResponse(_:for:), instead of or in addition to the request-based storeCachedResponse(_:for:).
Getting responses from the cache — Override getCachedResponse(for:completionHandler:), instead of or in addition to cachedResponse(for:).
Removing cached responses — Override the task-based removeCachedResponse(for:), instead of or in addition to the request-based removeCachedResponse(for:).
Topics
Getting and setting shared cache
Creating a new cache object
Getting and storing cached objects
cachedResponse(for:)storeCachedResponse(_:for:)getCachedResponse(for:completionHandler:)storeCachedResponse(_:for:)
Removing cached objects
removeCachedResponse(for:)removeCachedResponse(for:)removeCachedResponses(since:)removeAllCachedResponses()