AFNetworking 和 UIImageView 更新线程问题
Posted
技术标签:
【中文标题】AFNetworking 和 UIImageView 更新线程问题【英文标题】:AFNetworking and UIImageView updating threading issues 【发布时间】:2012-07-18 16:27:00 【问题描述】:所以我有一个带有自定义 UITableViewCells 的 UITableView,在我的自定义单元格中我有一个 UIImageView,我在其中使用 AFNetworking 类别来加载图像:
NSString *imageURLString = [[object.image_ valueForKey:@"low_resolution"] valueForKey:@"url"];
NSURLRequest *imageURLRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:imageURLString] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:30];
[self.imageView_ setImageWithURLRequest:imageURLRequest andAnimate:YES placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image)
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error)
NSLog(@"FAILED");
];
问题是,有时当您向下滚动时.. 在触发图像请求之前似乎有很长的延迟。我正在以非常好的连接进行测试。为什么会这样?
我不确定图像请求是在以后触发还是响应只是在以后才返回。但我看到的是,最初当应用程序加载图像时加载正常。当我向下滚动时,所有图像都是白色的。如果我耐心等待 60 秒,它就会加载。
【问题讨论】:
直到图像请求被触发,或者直到请求的图像被传输并且你的成功块被调用? 【参考方案1】:一种可能的解释是,当您向下滚动列表时,您会发送大量请求,AFNetworking
在后台执行。
当您向下滚动时,发出的请求数量会增加,并且它们可能会以 FIFO 顺序在服务器端提供服务(也可能是服务器在将图像传输到您的应用时不会超过给定的带宽) ,所以当你停止滚动才能看到当前显示的图像时,你必须等待一堆以前的图像加载。
这可以解释您为什么会有延迟。我建议将 NSLog 跟踪放在您的成功处理程序中并记录请求 url,这样您就可以看到发生了什么:检查传入图像的流;查看传输每张图像需要多长时间。
一般来说,您尝试做的事情应该没问题,这就是为什么我在考虑由您发送的请求数量触发的服务器端问题。
【讨论】:
仅供参考,服务器是 Instagram API 的以上是关于AFNetworking 和 UIImageView 更新线程问题的主要内容,如果未能解决你的问题,请参考以下文章