这是用我的viewDidLoad
方法
NSOperationQueue *queue = [NSOperationQueue new];
NSInvocationOperation *op = [[NSInvocationOperation alloc]
initWithTarget:self
selector:@selector(downloadImage)
object:nil];
[queue addOperation:op];
//其他方法中的其余部分;
- (void)downloadImage{
NSData* imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:person.picURL]];
UIImage* image = [[UIImage alloc] initWithData:imageData] ;
[self showImage: image];
}
我尝试在[self showImage: image];
之上添加以下代码,最后我得到了一个例外。
1。)[self performSelectorOnMainThread:@selector(showImage:) withObject:image waitUntilDone:NO];
2。)[self performSelectorInBackground:@selector(showImage:) withObject:image];
//这是showImage
代码。
- (void)showImage:(UIImage *)img {
if (img != nil)
{
myImageView = [[UIImageView alloc] initWithImage:img];
myImageView.frame = CGRectMake(20, 20, 132, 124);
[scrollView addSubview:myImageView];
[pictureOfPerson setImage:img];
}
}
我正在尝试Asynchronously
下载图片并对其进行缓存。图像被下载Asynchronously
但我不确定它是否被缓存。
1。)如何缓存图像并在视图再次加载时使用它
2。)当图像下载时,如果我点击另一个视图怎么办?然后我需要停止下载。我该怎么写这段代码。我知道我必须在viewDidDissapear方法中编写它。
3。)我的代码是否正确。我错过了什么或有没有更好的方法来做到这一点?如果是这样的教程或一些示例代码,请
答案 0 :(得分:1)
您可以使用:SDWebImage
答案 1 :(得分:1)
我使用GCD下载图片。它比NSOperation简单易用。这是一个例子:
UIImage *personPicture;
personPicture = [self.imageCache objectForKey:person.picURL];
if (!personPicture) {
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:person.picURL]];
personPicture = [UIImage imageWithData:imageData];
[self.imageCache setObject:imageData forKey:person.picURL];
dispatch_async(dispatch_get_main_queue(), ^{
[self showImage:personPicture];
});
});
}
else {
[self showImage:personPicture];
}
您可以使用类似NSMutableDictionary的类属性来存储UIImage数据并将其与您的URL相关联。如果它存在,请使用它,如果没有,请下载图像。
CNC中 添加代码来处理缓存。