我有一个问题,我正在使用
加载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倍的数据使用量
希望这可以解决问题。
答案 0 :(得分:0)
听起来您想要缓存图像,因此您无需继续加载它。假设这就是你的意思......
AFNetworking方法[UIImageView -setImageWithURL:placeholderImage:]
已经为您缓存了此图像。第二次调用它时,图像将从缓存中加载。
第二次从服务器重新加载的唯一原因是,如果您的应用自上次下载后收到内存不足警告。 (AFImageCache
,一个NSCache
子类,将自动使部分或全部缓存无效。)
它使用URL作为密钥,因此只要URL相同,图像就只能从服务器加载一次。