UI-NSOperation线程
Posted 在一起的浅蓝色
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UI-NSOperation线程相关的知识,希望对你有一定的参考价值。
1、除NSThread之外的第二种多线程的编程方法
2、采用NSOperation(线程操作,通常用他的子类)和NSOperationQueue(线程队列)搭配来做多线程开发,采用NSOperation指定一个操作,把这个操作放到线程队列(线程池)中,让线程队列安排他的生命周期。
3、与NSThread有什么区别
(1)NSThread需要启动,也就是说需要费心管理线程的生命周期,而采用NSOperation方式只需要将线程放到线程队列中即可,线程队列负责管理、执行所有的线程操作
(2)管理线程的最大并发数,也就是同时执行的任务数
(3)控制线程之间的依赖关系,NSOperation之间可以设置依赖来保证执行顺序,比如一定要让操作1执行完后,才能执行操作2,线程之间不能相互依赖,不能A依赖B,B又依赖A
(4)队列的取消、暂停、恢复。
步骤:
1、创建视图
2、创建线程
3、创建线程队列
4、把线程放在线程队列中
3、创建线程队列
4、把线程放在线程队列中
5、在子线程加载网络资源
6、回到主线程
7、在主线程更新UI
下面以 NSBlockOperation和 NSOperationQueue 的搭配 为例:
1 #pragma mark NSBlockOperation和 NSOperationQueue 的搭配
2
3 - (void)viewDidLoad {
4
5 [super viewDidLoad];
6
7 // 1、创建视图
8
9 imageView = [[UIImageView alloc]initWithFrame:CGRectMake(50, 50, 200, 200)];
10
11 [self.view addSubview:imageView];
12
13 // 2、创建一个线程操作
14
15 NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
16
17
18
19 // 5、加载网络资源
20
21 NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:kurl]];
22
23
24
25 UIImage *image = [UIImage imageWithData:data];
26
27
28
29 // 6、返回主线程
30
31 [[NSOperationQueue mainQueue]addOperationWithBlock:^{
32
33
34
35 // 7、在主线程更新UI
36
37 imageView.image =image;
38
39 }];
40
41 }];
42
43 // 3、创建一个线程队列
44
45 NSOperationQueue *operationQueue = [NSOperationQueue new];
46
47 // 4、把线程操作放到线程操作队列里
48
49 [operationQueue addOperation:blockOperation];
50
51 }
52
53 @end
以上是关于UI-NSOperation线程的主要内容,如果未能解决你的问题,请参考以下文章
JUC并发编程 共享模式之工具 JUC CountdownLatch(倒计时锁) -- CountdownLatch应用(等待多个线程准备完毕( 可以覆盖上次的打印内)等待多个远程调用结束)(代码片段