多线程 GCD NSOperationQueue NSThread

6 篇文章 0 订阅
1 篇文章 0 订阅
本文详细介绍了iOS开发中常用的三种多线程技术:NSThread、NSOperationQueue和GCD。讨论了它们的使用场景、优缺点以及如何实现线程同步。NSThread提供了线程的生命周期管理和优先级设置;NSOperationQueue允许设置最大并发数和任务依赖;GCD则提供了串行队列和并发队列,以及dispatch_async、dispatch_sync等方法。此外,还提到了线程同步中的@synchronized关键字和NSLock的使用。
摘要由CSDN通过智能技术生成

在开发过程当中使用的多线程方式一般有三种,NSThread,NSOperation/NSOperationQueue,GCD

 

NSThread需要手动管理线程的生命周期,使用NSThread 可以中途取消任务,也可以设置线程的优先级(0-1 越大优先级越高,默认都是0.5)在NSObject中苹果官方对其进行了封装

可以直接调用

-(void)performSelectorInBackGround:(SEL)aSelector withObject:(id)arg;

在后台直接调用一个方法执行,本质就是自动建一个线程,然后在其中执行一个操作

-(void)performSelector:(SEL)aSelector onThread:(NSThread*)thewithObject:(id)arg waitUntilDone:(BOOL)wait

在指定线程上执行一个操作,需要用户创建一个线程对象

 

-(void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)argwaitUntilDone:(BOOL)wait;

在主线程执行一个操作

 

-(void)performSelector:(SEL)aSelector withObject:(id)arg afterDelay:(NSTimeInterval)time;

另开一个线程延迟指定时间后再执行这个操作

 

 

NSOperationQueue 是一个线程队列 可以创建一个NSOperation对象来放入队列中执行,一般是使用NSOperation的子类来创建一个任务,NSOperation有两个子类,一个是NSInvocationOperation 另一个是NSBlockOperation,使用NSOperationQueue可以设置最大线程并发数量,并且可以使用[operation1addDependency:operation2】来_添加依赖,operation1需要等到operation2执行完毕后再执行

 

GCD

GCD是一种基于C语言的一种多线程开发机制,

在GCD当中有两种队列 串行队列:在当前线程执行,添加在其中的任务按照顺序依次执行

                     并发队列:将添加进来的任务分配在可用的处理器上,同时执行。

在GCD中也有两种执行方法,dispatch_async 异步执行

                        dispatch_sync  同步执行

可以通过dispatch_queue_t queue = dispatch_queue_creat(“你的队列名”,DISPATCH_QUEUE_SERIAL)

来创建一个串行队列

 

通过dispach_get_main_queue() 获得主队列 一般在主队列中执行更新UI的方法

。0+

 

而获取并发队列的方法类似 dispatch_queue_creat)(“你的队列名”,DISPATCH_QUEUE_CONCURRENT)

但是一般在开发中我们无需创建一个新的并发队列,我们可以通过

 

dispatch_get_global_queue 来获取一个全局并行队列:  

下面说一下GCD当中常用的方法

dispatch_apply():重复执行某个任务,不过这个方法没有办法异步执行(不过可以用dispatch_async包装一下就OK了)

dispatch_once() 这个方法只会执行一次,从此以后在程序没有退出以前就不会在执行,一般用来自定义一个单例对象是使用

dispatch_after()可以延迟一定时间执行一个任务,并且是异步的。

 

虽然多线程能够提高程序的性能,但是有时候当多个线程抢夺同一个资源是就需要使用线程同步了 NSThread使用线程同步一般可以使用NSLock同步锁,还有NSCondition, 但是一般使用@synchronized(self){  }代码块,这样比较方便

 

@synchronized(self){…………………………………………..000

       // 修改

}

 

{

NSlock  l = [NSLock alloc]init];

 

[l lock];

 

// 修改操作

 

[l unlock];

 

}

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值