AFNetworking和多个UIImageViews从相同的URL拉出

时间:2013-07-16 17:15:45

标签: uiimageview uiimage nsdata afnetworking

我有一个问题,我正在使用

加载3,有时是4个相同的图像

[imageFile setImageWithURL:[NSURL URLWithString:friendAvatar] placeholderImage:[UIImage imageNamed:@"defaultProfileImage.png"]];

我试图看看是否有一种方法可以将其加载到某种NSData并稍后使用它,有点像我在下面做的,但使用AFNetworking。

dispatch_async( dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0 ), ^(void)
                   {
                       NSURL *url3 = [NSURL URLWithString:friendAvatar];
                       NSData *data = [NSData dataWithContentsOfURL:url3];
                       UIImage *img = [[UIImage alloc] initWithData:data];
                       dispatch_async( dispatch_get_main_queue(), ^(void){
                           imageFile.image = img;
                           bgImageFile.image = img;
                       });
                   });

此外,我没有调用图像加载所有相同的方法,2填写用户朋友列表后在cellForRowAtIndexPath下调用,然后当我在单元格上滑动以显示其隐藏(下)图层时加载第3个,当按下一个按钮时,第四个重复的图像会被调用,这个按钮一旦刷过一个细胞就显示出来,这导致了我和那个朋友之间的聊天室视图。

希望我明白了我想要实现的目标。非常感谢任何指向正确方向的帮助。

更新

这是我目前的代码,这就是我的意思是我多次拉动相同的图像。

cellForRowAtIndexPath

[imageFile setImageWithURLRequest:request placeholderImage:[UIImage imageNamed:@"defaultProfileImage.png"]];
[bgImageFile setImageWithURL:[NSURL URLWithString:friendAvatar] placeholderImage:[UIImage imageNamed:@"defaultProfileImage.png"]];

调用的方法bottomDrawerWillAppear包含

UIImageView *drawerBGImg = [[UIImageView alloc]  initWithFrame:CGRectMake(0,0,320,75)];
NSString *friendAvatar = [NSString stringWithFormat:@"%@%@%@", @"http://v9a2a7.com/user_photos/", [MyClass friendID], @".jpg"];
[drawerBGImg setImageWithURL:[NSURL URLWithString:friendAvatar]];

在一个单独的班级和单独的观点viewMessageViewController

NSString *friendAvatar = [NSString stringWithFormat:@"%@%@%@", @"http://v9a2a7.com/user_photos/", email, @".jpg"];
[bgImage setImageWithURL:[NSURL URLWithString:friendAvatar]];

我还没有确认viewMessageViewsController强制从服务器中提取图像,但我知道cellForRowAtIndexPath上的事实对同一图像提出3次请求导致使用3倍的数据使用量

希望这可以解决问题。

1 个答案:

答案 0 :(得分:0)

听起来您想要缓存图像,因此您无需继续加载它。假设这就是你的意思......

AFNetworking方法[UIImageView -setImageWithURL:placeholderImage:]已经为您缓存了此图像。第二次调用它时,图像将从缓存中加载。

第二次从服务器重新加载的唯一原因是,如果您的应用自上次下载后收到内存不足警告。 (AFImageCache,一个NSCache子类,将自动使部分或全部缓存无效。)

它使用URL作为密钥,因此只要URL相同,图像就只能从服务器加载一次。