iOS 多线程的使用情况

1.NSThread:

(1)最底层的线程管理,运行效率最高,但是使用来管理多个线程不方便;

(2)创建方式:- (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument ; 

    + (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument;

          [NSThread currentThread]用来追踪当前线程(当前任务执行的线程);

 [  self performSelectorOnMainThread:@selector(updateUI) withObject:nil waitUntilDone:YES];刷新主线程。

(3)当使用alloc init 初始化线程时,要手动启动(thread start);

(4)当多个线程同时访问同一个数据的时候使用NSCondition,NSClock(线程锁)保证数据同步访问;

2.NSOperation:(是基础类,不能直接使用,没有可用的方法)

(1)NSInvocationOperation子类:

NSInvocationOperation *invocation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(act:) object:@"invocation"];[invocation start]单独使用Operation必须手动启动,默认在当前线程执行,是同步执行。

(2)NSBlockOperation子类:

NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{

        //具体执行的方法

        [self act:@"blockOperation"];

    }];

[blockOperation addExecutionBlock:^{  }];添加操作,当NSBlockOperation的操作数大于1的时候会开辟新线程执行。

(3).线程队列:NSOperationQueue,将Operation放在操作队列里面管理线程,会自动启动线程,开辟线程执行任务且为一部操作。

NSOperationQueue *queue = [[NSOperationQueue alloc]init];

queue.maxConcurrentOperationCount = 2;

[queue addOperation :invocation];

[queue addOperation:blockOperation];

3.GCD(Grand Central Dispatch 中央调度 )

(1)当在主线程执行操作时,若使用dispatch_sync操作会造成死锁现象,因为在主线里面任务是顺序执行的,会等待上一个任务执行完毕才会执行下一个任务,而同步操作也是顺序执行任务同样会等待,就这样相互等待另一个任务执行就会死锁。

(2)dispatch_get_main_queue()主队列(属于串行队列是顺序执行的);

     dispatch_get_global_queue(long identifier, unsigned long flags)(全局并发队列)

(3)

     dispatch_sync(dispatch_queue_t queue, ^{

        使用情况:当与并发队列一起使用的时候,或者需要等待一个任务执行完毕之后才处理下一个操作的情况。

       });

    dispatch_sync(dispatch_queue_t queue, ^{

        使用情况:执行耗时操作的时候,不需要考虑任务的执行顺序。

       });





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值