Cache

Cache

Intro

Caching is an important topic and doing it right is sometimes very hard.
Lots of topics to cover in Caching mechanism. Here we just go through basic stuff about Caching.

Manager

class CacheManager {
	// Singleton
	static let shared = CacheManager()
	private init() { }

	func configure() { 
		URLCache.shared = CachedSession.sessionUrlCache
	}
	
	func clearCache() {
		URLCache.shared.removeAllCachedResponses()
	}
	

	func saveCache() {
		queue.sync(flags: .barrier, execute: {
            try? saveToDatabaseManager()
        })
	}
}

Cache Config

class CachedSession {
	static var sessionUrlCache: URLCache = {
        return URLCache(memoryCapacity: 1024 * 1024 * 200 ,
                                   diskCapacity: Int.max,
                                   diskPath: nil)
    }()					
}

It equals approximately 209 MegaBytes of Cache storage.

Image Cache

Caching Dictionary

Theory

Since Swift Dictionaries or in dictionaries in general conform to Hashable protocol which means every time we add a value the hasher function creates a unique ID to quickly reference that in the Dictionary. Which is why we can get Time complexity of O(1) which is the fastest I believe.
And there is also less CPU performance hit because for the past decade or so CPU have inbuilt hardware accelerator chips to do these kind of hashing mechanism on the fly and dedicated chip modules make CPU context switching back & forth pretty inexpensive.

Source my own MR about my helper swift package for swift related projects (iOS, macOS, tvOS, watchOS) apps