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 的搭配 为例:
 
 #pragma mark  NSBlockOperation和 NSOperationQueue 的搭配

 - (void)viewDidLoad {

     [super viewDidLoad];

 //    1、创建视图

         imageView = [[UIImageView alloc]initWithFrame:CGRectMake(, , , )];

         [self.view addSubview:imageView];

 //    2、创建一个线程操作

     NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{

 //        5、加载网络资源

         NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:kurl]];

         UIImage *image = [UIImage imageWithData:data];

 //        6、返回主线程

         [[NSOperationQueue mainQueue]addOperationWithBlock:^{

 //        7、在主线程更新UI

             imageView.image =image;

         }];

     }];

 //    3、创建一个线程队列

     NSOperationQueue *operationQueue = [NSOperationQueue new];

 //    4、把线程操作放到线程操作队列里

     [operationQueue addOperation:blockOperation];

 }

 @end
 

最新文章

  1. ASP.NET MVC Model验证(一)
  2. [Eclipse] - eclipse集成jboss7.1
  3. js 事件捕获与事件冒泡例子
  4. HDOJ 1690
  5. UVa 10817 Headmaster's Headache (状压DP+记忆化搜索)
  6. PHP vs Java
  7. spark-sql
  8. 从汇编看c++成员函数指针(二)
  9. MFC 关于对话框的注意点
  10. CAS在Java类中的应用
  11. Efounds笔试
  12. json-sever 配置与应用
  13. logback配置信息
  14. python for循环的遍历
  15. OxyPlot Controller OxyPlot控制器
  16. Ubuntu 16.04安装Maven
  17. REST-framework快速构建API--初体验
  18. JavaScript 新手的踩坑日记
  19. 域名与IP对应,解决只能IP访问不能域名访问的问题
  20. 矩阵&行列式

热门文章

  1. [WPF 自定义控件]让Form在加载后自动获得焦点
  2. Scrapy框架的简单使用
  3. C#中实现文件重命名的方式
  4. PHPStudyLite启动不成功怎么办
  5. kali安装openvas
  6. Oracle 两个逗号分割的字符串,获取交集、差集的sql实现过程解析
  7. tomcat修改进程名称
  8. MATLAB实例:构造网络连接图(Network Connection)及计算图的代数连通度(Algebraic Connectivity)
  9. property用法,使Python中的get方法和set方法使用更简单
  10. AcWing 791. 高精度加法 解题记录