zoukankan      html  css  js  c++  java
  • 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

     

     
  • 相关阅读:
    Java多态(更新中...)
    C语言free释放内存后为什么指针里的值不变?竟然还可以输出?
    LeetCode:344-反转字符串
    20150518 字符设备驱动
    20150517 Linux文件系统与设备文件系统
    20150514我读《深入理解linux内核》之虚拟文件系统笔记
    双系统Ubuntu下修复启动项的两种方法
    20150503 imx257下实现I2C驱动的四种方法
    20150502 调试分析之 使用gdb远程调试ARM开发板
    20150501 调试分析之 修改内核来定位系统僵死问题
  • 原文地址:https://www.cnblogs.com/liuzhi20101016/p/5239443.html
Copyright © 2011-2022 走看看