2013年6月29日 星期六

iOS_NSCache

一直不太會用NSCache,翻了一下上學期的作業範例,發現有個使用NSCache的方式(using in singleton),先來記錄
1. 從網路上找到了一些關於NSCache的描述,幾乎都會抄Apple官方文件中,來說明NSCache和NSDictionary的差別XD,總之結論:
   |- NSCache跟NSDictionary很像
   |- 和NSDictionary相同的地方在於都使用key-value的方式
   |- 不一樣的地方在於NSCache會在memory比較吃緊的時候釋放
   |- Apple中提到如果資料是一次性的資料(例如:user input)則不建議使用NSCache->一次性資料會被destroy
   |- 如果資料是可以重複獲得,則盡量使用NSCache來加速獲得資料
2. 網路上的範例(精簡扼要):
   |- 宣告NSCache
NSCache *cache = [[NSCache alloc]init];
   |- write data to NSCache and disk
- (void)write:(NSData*)data forKey:(NSString*)key{

    NSString *filepath = [self filePathForKey:key];
    [cache setObject:data forKey:key];
    dispatch_async(fileQueue, ^{
        [[NSFileManager defaultManager] createFileAtPath:filepath 
                                                contents:data 
                                              attributes:nil];
    });
}
   |- read data from NSCache or disk
- (NSData*)readForKey:(NSString*)key{

    if(key==nil){
        return nil;
    }

    NSData *cacheData = [cache objectForKey:key];
    if(cacheData){

        NSLog(@"get data from cache");
        return cacheData;

    }
    else{
        NSLog(@"miss data from cache");
        NSString *filepath =[self filePathForKey:key];
        NSData *fileData = [[NSFileManager defaultManager] contentsAtPath:filepath];

        if(fileData){
            [cache setObject:fileData forKey:key];
        }

        return fileData;
    }
}
3. 另外放上上學期的作業,在singleton(CLDataSource有比較詳盡用法)
   |- CLDataSource.h
   |- CLDataSource.m
   |- hw2_CityList_SB

沒有留言:

張貼留言