IOS多线程

iOS中多线程分为三种:NSThread、NSOperation、GCD

其次,线程分为同步线程与异步线程(同步线程===串行,异步线程===并发)

NSThread、NSOperation、GCD比较:
 优点缺点
NSThread是三种线程中一种较轻量级的线程,使用方便、简单需要自己去管理线程的生命周期、线程同步、加锁、睡眠以及唤醒等,需要耗费更多系统资源
NSOperation不需要像NSThread一样自己管理线程的生命周期、线程同步问题等,只需关注自己的业务逻辑处理
GCD比前两者更加高效、强大 


一、NSThread的使用:

//1.在新建的线程中执行target的selector方法,并且支持向函数传递参数,但参数最多只可为1个

[NSThread  detachNewThreadSelector:@selector(newThread:)  toTarget:self  withObject:@10];


//2.新建一个线程,该线程启动时会执行target的selector方法,并且也支持传递参数,参数同样最多为1个

//与上一中方式不同的是此种方式创建的线程不会立刻启动,需要使用start方法启动线程

NSThread  *newThread = [[NSThread  alloc] initWithTarget:self  selector:@selector(startThread:)  object:@10 ];

//启动线程

[newThread  start];


//3.获取当前线程

[NSThread  currentThread];


//4.取消newThread线程

[newThread  cancel];


//5.判断某个线程自己是否被取消

[newThread  isCancelled];


//6.结束当前线程

[NSThread  exit];


//7.让线程睡一会儿,sleepForTimeInterval参数为要睡的时长

[NSThread  sleepForTimeInterval:2];


//线程锁NSLock

NSLock *lock = [[NSLock alloc] init]; //创建一个锁

[lock lock]; //上锁

[lock unlock]; //解锁


二、NSOperation的使用

//注:NSOperation任务必须加入到队列中才可以执行

//NSOperation有两种使用方法;1.使用两个定义好的子类:NSInvocationOperation、NSBlockOperation;2.继承NSOperation

//创建一个队列

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

//设置队列的最大并发量

queue.maxConcurrentOperationCount = 2;

//1.通过NSInvocationOperation创建一个NSOperation线程,执行target中的selector方法,通过object传递一个参数

NSInvocationOperation *invocationOperation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(cooking:) object:@11];


//2.通过NSBlockOperation创建一个NSOperation线程,在这个任务当中会执行block代码块中的代码

NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{

//需要执行的代码块

}];


//3.将NSOperation任务添加到队列当中

[queue addOperation:invocationOperation]; //以block方式建立的Operation任务添加到队列中方式与此相同


//4.在主线程self.tableView中执行selector方法

[self.tableView PerformSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];


//5.取消Operation线程

[operation cancel];


三、GCD的使用

名次解释:

global:全局

queue:队列

async:异步

sync:同步


//异步

dispatch_async

//除主线程之外的队列

dispatch_get_global_queue

//新建一个除主线程之外的线程,并且在这个线程里边执行block里的代码

dispatch_async(dispatch_get_blobal_queu)


//同步

dispatch_sync

//主线程队列

dispatch_get_main_queue


GCD很强大,我的使用经验很少。但是scorpiozj 总结的比较全面(http://www.cnblogs.com/scorpiozj/archive/2011/07/25/2116459.html

同时,这篇文章也介绍的比较详细 http://www.cnblogs.com/vinceoniphone/archive/2011/04/07/2007968.html 

官方教程


三类线程放在一块写比较笼统,后面会将此三种线程单独分开写,做更详细的叙述



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值