diff --git a/AwesomeCache/Cache.swift b/AwesomeCache/Cache.swift index 6da0abd..e9b2d36 100644 --- a/AwesomeCache/Cache.swift +++ b/AwesomeCache/Cache.swift @@ -235,11 +235,15 @@ open class Cache { // Otherwise, read from disk let path = urlForKey(key).path - if fileManager.fileExists(atPath: path) { - return _awesomeCache_unarchiveObjectSafely(path) as? CacheObject + guard + fileManager.fileExists(atPath: path), + let object = _awesomeCache_unarchiveObjectSafely(path) as? CacheObject else { + return nil } - - return nil + + // Keep in memory: + cache.setObject(object, forKey: key as NSString) + return object } // Deletes an object from disk diff --git a/AwesomeCacheTests/AwesomeCacheTests.swift b/AwesomeCacheTests/AwesomeCacheTests.swift index 4f450c2..a67a813 100644 --- a/AwesomeCacheTests/AwesomeCacheTests.swift +++ b/AwesomeCacheTests/AwesomeCacheTests.swift @@ -30,6 +30,21 @@ class AwesomeCacheTests: XCTestCase { XCTAssertNotNil(cache.object(forKey: "add"), "Added object should not be nil") XCTAssertEqual("AddedString", cache.object(forKey: "add")!, "Fetched object should be equal to the inserted object") } + + func testObjectIsRetainedInMemoryWhenLoadedFromDisk() { + let cache = try! Cache(name: "testObjectMemoryRetention") + + //Add to cache, both in-memory and on-disk: + cache.setObject("AddedString", forKey: "add") + + //purge in-memory cache + cache.cache.removeAllObjects() + + //load from disk + _ = cache.object(forKey: "add") + + XCTAssertTrue(cache.isOnMemory(forKey: "add"), "Cached object should be loaded from disk and retained in memory") + } func testGetExpiredObjectIfPresent() { let cache = try! Cache(name: "testGetExpiredObject")