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
时间: 2024-10-22 00:04:45