我正在开发一个使用UITableView的应用程序,它包含大小为320 X 200的UIImageView的单元格。 这些图像来自网址和存储到我的应用文件夹。然后我向用户显示此图像。
为此我正在使用“UIImageView + AFNetworking.h”类的以下方法。
- (void)setImageWithURL:(NSString *)url
placeholderImageName:(NSString *)placeholderImage
saveFilePath:(NSString *) filePath
IndexPath:(NSIndexPath *)indexPath
success:(void (^)(NSIndexPath *indexPath, UIImage *image))success
failure:(void (^)(NSIndexPath *indexPath, NSError *error))failure {
NSLog(@"DOWNLOAD IMG URL :: %@", url);
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]];
[request setHTTPShouldHandleCookies:NO];
[request setHTTPShouldUsePipelining:YES];
[request addValue:@"image/*" forHTTPHeaderField:@"Accept"];
[self setImageWithURLRequest:request
placeholderImage:placeholderImage == nil? nil : [UIImage imageNamed:placeholderImage]
success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
[Storage SaveImage:image WithFileName:filePath];
if (success)
success(indexPath, image);
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
if (failure)
failure(indexPath, error);
}
];
}
当我的所有图像下载到我的本地文件夹后,我的桌面视图在显示图像时卡住了。
答案 0 :(得分:1)
下载可能与主线程同步并在下载完成之前阻止它。
我在我的项目中使用SDWebImage。它的工作非常好。
修改强>
好的,AFNetworking正在异步完成所有工作,并且还会缓存所有图像。请参阅documentation。
如果你不需要你的成功和失败阻止,你可以放弃它。
- (void)setImageWithURL:(NSString *)url
placeholderImageName:(NSString *)placeholderImage {
NSURL *url = [NSURL URLWithString:[url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
UIImage *pImage = placeholderImage == nil? nil : [UIImage imageNamed:placeholderImage];
[self setImageWithURL:url placeholderImage:pImage];
}
答案 1 :(得分:0)
或者图像可能非常大(这与UIImageView大小无关)。 我们能看到您的代码吗? 你从文件系统手动加载它们吗?可能是因为你在主线程中这样做了。 在加载图像的代码中尝试此操作: NSLog(@"这是主线程:%d",[NSThread isMainThread]); 如果你看到1,那就是问题所在。您可以使用GCD解决它(请记住,一旦加载图像,将其移动到主线程)
答案 2 :(得分:0)
使用NSOperationQueue下载图像。在NSOperationQueue中添加新项目时,首先检查它是否已添加。
NSOperation完成后,该图像将保存到本地。
始终从本地加载图片。如果图像不存在于本地,则显示一些占位符。
希望它有所帮助。
此致 Punita