#pragma mark - 下载图像方法一:使用NSOperationQueue
- (void)downLoadImageUserOperationQueue
{
NSString *url = kIMAGEURL;
NSInvocationOperation *operator = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector (downLoadImage:) object:url]; //申请一个新的线程
NSOperationQueue *queue = [[NSOperationQueue alloc]init]; //申请一个队列
[queue addOperation:operator]; //在队列中加入线程
}
- (void)downLoadImage:(NSString *)urlPath
{
NSURL *url = [NSURL URLWithString:urlPath];
NSData *data = [[NSData alloc]initWithContentsOfURL:url];
UIImage *image = [UIImage imageWithData:data];
[self performSelectorOnMainThread:@selector(updateUI:) withObject:image waitUntilDone:YES]; //performSelectorOnMainThread: 进入主线程,再调用主线程里的方法,因为要改变界面,必须回到主线程
}
- (void)updateUI:(UIImage *)image //更新图片
{
self.myImageView.image = image;
}
#pragma mark - 下载图像方法二:使用GCD
- (void)downLoadImageUserGCD
{
[self.myActivityView startAnimating];
self.myActivityView.hidesWhenStopped = YES;
//一步多线程编程
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //dispatch_get_global_queue自动生成一个全局队列,DISPATCH_QUEUE_PRIORITY_DEFAULT默认一个线程
NSURL *url = [NSURL URLWithString:kIMAGEURL];
NSData *data =[[NSData alloc]initWithContentsOfURL:url];
UIImage * image = [UIImage imageWithData:data];
if(data != nil)
{
dispatch_async(dispatch_get_main_queue(), ^{ //dispatch_get_main_queue() (C语言方法)获得当前主线程
self.myImageView.image = image;
[self.myActivityView stopAnimating];
});
}
});
}
- (void)downLoadImageUserOperationQueue
{
NSString *url = kIMAGEURL;
NSInvocationOperation *operator = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector (downLoadImage:) object:url]; //申请一个新的线程
NSOperationQueue *queue = [[NSOperationQueue alloc]init]; //申请一个队列
[queue addOperation:operator]; //在队列中加入线程
}
- (void)downLoadImage:(NSString *)urlPath
{
NSURL *url = [NSURL URLWithString:urlPath];
NSData *data = [[NSData alloc]initWithContentsOfURL:url];
UIImage *image = [UIImage imageWithData:data];
[self performSelectorOnMainThread:@selector(updateUI:) withObject:image waitUntilDone:YES]; //performSelectorOnMainThread: 进入主线程,再调用主线程里的方法,因为要改变界面,必须回到主线程
}
- (void)updateUI:(UIImage *)image //更新图片
{
self.myImageView.image = image;
}
#pragma mark - 下载图像方法二:使用GCD
- (void)downLoadImageUserGCD
{
[self.myActivityView startAnimating];
self.myActivityView.hidesWhenStopped = YES;
//一步多线程编程
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //dispatch_get_global_queue自动生成一个全局队列,DISPATCH_QUEUE_PRIORITY_DEFAULT默认一个线程
NSURL *url = [NSURL URLWithString:kIMAGEURL];
NSData *data =[[NSData alloc]initWithContentsOfURL:url];
UIImage * image = [UIImage imageWithData:data];
if(data != nil)
{
dispatch_async(dispatch_get_main_queue(), ^{ //dispatch_get_main_queue() (C语言方法)获得当前主线程
self.myImageView.image = image;
[self.myActivityView stopAnimating];
});
}
});
}