NSCache数据被清除

时间:2012-10-11 08:34:02

标签: objective-c

我在NSCache中存储一个数组。(我的NSCache名称是aesCache)

 #define DEBUG_CACHE 1
 self.aesCache = [[NSCache alloc] init];
 [self.aesCache setDelegate:self];

在NSCache中保存数组

        - (void)saveObjects:(NSMutableArray*)savedObj {
            [self saveValue:savedObj key:@"Objects"];
        }

将其保存到NSCache。

 - (void)saveValue:(id)value key:(NSString *)key {
#ifdef DEBUG_CACHE
    NSLog(@"#CACHE_MANAGER: SAVE Object");
    NSLog(@"#CACHE_MANAGER: KEY %@", key);
#endif
    if (value && key) {
        [self.aesCache setObject:value forKey:key];
    }
    else {
#ifdef DEBUG_CACHE
        NSLog(@"#CACHE_MANAGER: *** KEY VALUE SEEMS TO BE NIL ***");
#endif
    }

}

要从缓存中获取该数组,我使用:

- (NSMutableArray*)getObjects {
    array = [self getValue:@"Objects"];
    #ifdef DEBUG_CACHE
         NSLog(@"#CACHE_MANAGER: Getting the 'Objects' from Cache");
   #endif
        if (areas == nil) {
   #ifdef DEBUG_CACHE
         NSLog(@"#CACHE_MANAGER: No Objects cached. ");
    #endif


    }
    return array;
}

我将从缓存中获取数组。但是,如果我锁定屏幕然后打开它 缓存委托功能

- (void)cache:(NSCache *)cache willEvictObject:(id)obj {
    #ifdef DEBUG_CACHE
        NSLog(@"#CACHE_MANAGER: Going to evict the object");
    #endif
}

解雇了,我会得到空的结果。 我该如何解决这个问题。

请帮帮我。

1 个答案:

答案 0 :(得分:1)

NSCache的目的是缓存objets,但可以随时刷新以保留内存。如果你想要一个更持久的缓存,你应该使用字典。