0

我有一个问题,我使用加载 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;
                       });
                   });

我也没有调用图像加载全部以相同的方法,一旦填充了用户朋友列表,在 cellForRowAtIndexPath 下调用 2 次,然后当我在单元格上滑动以显示其隐藏(下)层时加载第 3 次,第 4 次重复按下按钮时会调用图像,该按钮会在单元格被滑动后显示,从而导致我和那个朋友之间的聊天室视图。

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

更新:

这是我当前的代码,这就是我多次拉同一张图片的意思。

在 - 的里面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's 强制从服务器中提取图像,但我知道一个事实,即cellForRowAtIndexPath对同一图像发出 3 次请求,这导致使用 3 倍的数据使用量

希望这可以解决问题。

4

1 回答 1

0

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

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

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

它使用 URL 作为 key,所以只要 URL 相同,图像只会从服务器加载一次。

于 2013-07-16T19:13:32.490 回答