2014-09-22 3 views
1

Я использую ниже код для чтения &, записывая код в каталоге документов, моя проблема заключается в том, что при загрузке изображений большого размера приложение приносит предупреждение о памяти и крушение иммиграции так как с этим справиться.Как справиться с предупреждением о памяти во время записи и чтения изображений из каталога документов iOS

- (void)cacheImage:(UIImage *)image forRequest:(NSURLRequest *)request 
{ 
    NSData *data=UIImageJPEGRepresentation(image, 1.0); 
    [self writeImageData:data forPlayListID:[self cachedFileNameForKey:request.URL.absoluteString]]; 
} 


-(UIImage *)getImageFromForPlayListID:(NSString *)strID{ 

    NSString *docDirPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    docDirPath = [docDirPath stringByAppendingPathComponent:@"/MyFolder"]; 

    NSString *filePathCellImg = [NSString stringWithFormat:@"%@/%@",docDirPath,strID]; 
    NSData *data=[NSData dataWithContentsOfFile:filePathCellImg]; 
    UIImage *musicImage = [UIImage imageWithData:data]; 
    return musicImage; 
} 


-(void)writeImageData:(NSData *)imageData forPlayListID:(NSString *)strID{ 

    NSError *error; 
    NSString *docDirPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 

    NSString *dataPath = [docDirPath stringByAppendingPathComponent:@"/MyFolder"]; 


    if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath]) 
     [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error]; 

    // [[NSFileManager defaultManager] removeItemAtPath:dataPath error:&error]; 

    NSString *filePathCellImg = [NSString stringWithFormat:@"%@/%@",dataPath,strID]; 


    [imageData writeToFile:filePathCellImg atomically:NO]; 
    if (![[NSFileManager defaultManager] fileExistsAtPath:filePathCellImg]) { 
    [[NSFileManager defaultManager] createFileAtPath:filePathCellImg 
              contents:imageData 
              attributes:nil]; 
    } 

} 

ответ

0

Использование SDWebImage т является лучшей библиотекой для кэширования изображений ... вы можете выбрать его из ниже URL (Github) https://github.com/rs/SDWebImage()

Как ... // Здесь мы используем новую предоставленную setImageWithURL: метод для загрузки веб-изображения [cell.imageView setImageWithURL: [NSURL URLWithString: @ "http://www.domain.com/path/to/image.jpg "] placeholderImage: [UIImage imageNamed: @" placeholder.png"] завершено:^(UIImage * изображение, NSError * ошибка, SDImageCacheType cacheType) {... код завершения здесь ...}];