多线程编程
来源:互联网 发布:剑网三盾太捏脸数据 编辑:程序博客网 时间:2024/06/05 19:12
#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];
});
}
});
}
0 0
- 多线程编程
- 多线程编程
- 多线程编程
- 多线程编程
- 多线程编程
- 多线程编程
- 多线程编程
- 多线程编程
- 多线程编程
- 多线程编程
- 多线程编程
- 多线程编程
- 多线程编程
- 多线程编程
- 多线程编程
- 多线程编程
- 多线程编程
- 多线程编程
- 二维数组的行地址与列地址应用举例
- Linux 开发板网络设置
- OK6410(s3c6410)时钟系统
- Android SQLite数据库使用 学习与代码实践
- 测试用例设计白皮书--判定表驱动分析方法
- 多线程编程
- 图片3d轮放查看效果(V2.0):使用鼠标拖动实现图片的轮放
- IOS之NSArray 中调用的方法详解
- 测试用例设计白皮书--正交实验设计方法
- 索引扫描dblink
- linux多线程---pthread_cancel
- 测试用例设计白皮书--功能图分析方法
- 【破解利器】反汇编工具 and 反编译(Decompilers)
- 遗传算法总结