[TwistedFate]多线程编程NSOperation

常用开启多线程的方法

  1. NSOperation 封装一下GCD的方法 提供OC的语法来使用GCD
  2. 2.GCD 官推 可以最大化的发挥多核CPU 是C语言的函数
    • NSOperation 是一个抽象类
    • NSBlockOperation
    • NSInvocationOperation

线程队列

  • 1.串行队列 主线程相当于一个串行队列 队列中的任务 需要一个执行完毕后 再执行下一个
  • 2.并行队列 队列中的任务进行 并发执行 同时开始 未必同时结束

  • 同步:没有开启子线程的能力

  • 异步:拥有开启子线程的能力
  • 任务是什么?
  • 比如说 下载 打印 都是个任务
  • 使用GCD 或者NSOperation 要做的就是 往合适的队列中添加任务 其他的系统会根据队列的类型 开启线程去完成任务

  • 线程之间的通信
    在子线程中 完成耗时的操作完成后需要回到主线程进行UI的刷新….tableView

  • 主线程 与 子线程是独立的 互不干扰

NSOperation

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

    //  需要把NSInvocationOperation对象 放进一个队列里 才能完成开启子线程

    //  创建一个队列
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];

    //  给队列 设置 最大并发数
    queue.maxConcurrentOperationCount = 1;

    //  开启一个线程(相当于 一个任务)
    NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(download:) object:@"12"];


    //  把任务添加到 队列中
    //  只需要把任务添加进队列中 不需要咱们来操作
    //  会自动执行 不是添加一个任务就开启一个线程
    //  这个操作是系统给咱们的  有的线程 会被系统重复利用(优化)
    [queue addOperation:operation];

    //  往队列中添加任务
    [queue addOperationWithBlock:^{

        //  block中 就是你要添加任务

        NSLog(@"%@",[NSThread currentThread]);

    }];

//      开启一个线程
//    [operation start];



    //  初始化一个任务
    NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{

        NSLog(@"任务------任务4-----%@",[NSThread currentThread]);


    }];

    //  添加进队列
    [queue addOperation:blockOperation];

}


- (void)download:(NSString *)str{

    NSLog(@"%@",[NSThread currentThread]);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值