-1

配列を 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
}

解雇され、空の結果が得られます。この問題を解決するにはどうすればよいですか。

私を助けてください。

4

1 に答える 1

1

NSCache の目的はオブジェクトをキャッシュすることですが、メモリを保持するためにいつでもフラッシュできます。より永続的なキャッシュが必要な場合は、辞書を使用する必要があります。

于 2012-10-11T08:50:18.853 に答える