iOS中的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、把线程放在线程队列中
       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

 

 
原文地址:https://www.cnblogs.com/liuzhi20101016/p/5239443.html