2014-01-30 77 views
2

我需要设置图像到我的imageViews。还有很多图片(我认为它将会接近200mb)。我需要保存全部,因为在没有互联网连接的情况下使用本地应用这是非常容易使用类别UIImageView+AFNetworking,但我不明白它是如何保存和在哪里?UIImageView + AFNetworking和保存图像

因此,在订阅方法here 时,您可以看到它使用的缓存策略为NSURLCacheStorageAllowed。所以图像保存在磁盘上的缓存文件夹中,对吗?没关系,但是这个存储有什么限制?我是否需要执行下面的代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    //another code... 
    NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 
                diskCapacity:200 * 1024 * 1024 
                 diskPath:nil]; 
    [NSURLCache setSharedURLCache:URLCache]; 
    return YES; 
} 

所以NSURLCacheStorageAllowedNSCachedURLResponse回到像storagePolicy。所以我明白我不能实现我上面写的代码。

如果我将使用UIImageView+AFNetworking类别,我的所有图像是否会保存在缓存存储器中?

回答

0

我已经做有点想,当我需要显示的tableView图像一样,首先我检查图像还可以在当地或没有,那么我下载的图片,并将其保存这样

if (userBasicInfo.userImage == nil) { 
      __weak LGMessageBoxCell *weakCell = cell; 
      [cell.userImage setImageWithURLRequest:[[NSURLRequest alloc] initWithURL:[NSURL URLWithString:userBasicInfo.imageUrl]] 
            placeholderImage:[UIImage imageNamed:@"facebook-no-user.png"] 
              success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image){ 
               weakCell.userImage.image = image; 
               [weakCell setNeedsLayout]; 

               [MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) { 
                UserBasicInfo* userBasicInfo = [[UserBasicInfo findByAttribute:@"userId" withValue:@(chatUser) inContext:localContext] objectAtIndex:0]; 
                userBasicInfo.userImage = UIImagePNGRepresentation(image); 
               } completion:^(BOOL success, NSError *error) { 
                NSLog(@"%@",[error localizedDescription]); 
               }]; 

              } 
              failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error){ 
              }]; 
     } else { 
      cell.userImage.image = [UIImage imageWithData:userBasicInfo.userImage]; 
     } 
3

的UIImageView +正如您发现的,AFNetworking依靠基础URL加载系统将数据缓存到磁盘。 diskCapacity将决定您的应用一次需要多少存储空间。这也将依赖于服务器指定适当的Cache-Control标题时处理图像 - 在某些情况下,如果缓存时间太短,NSURLCache根本不会存储它。

要更好地控制客户端的磁盘缓存,您可以查看SDWebImage

SDWebImage具有异步图像下载功能,对缓存有很多控制权 - 哪些图像被缓存,在磁盘或内存中存储多长时间等等。如果您需要保证图像存储一段特定时间, UIImageView + AFNetworking可能不会给你你需要的控制,你应该探索这个选择。

相关问题