GCD及多线程

返回UI主队列对象
dispatch_queue_t dispatch_get_main_queue();
返回当前对列对象
dispatch_queue_t dispatch_get_current_queue(void);
返回用户对列(设置一个标签和属性)
dispatch_queue_t dispatch_queue_create(
const char *label, dispatch_queue_attr_t attr);
得到用户的标签
const char *dispatch_queue_get_label(dispatch_queue_t queue);
对列的优先级 高 中<缺省> 低 最低<背景/后台>

define DISPATCH_QUEUE_PRIORITY_HIGH 2

define DISPATCH_QUEUE_PRIORITY_DEFAULT 0

define DISPATCH_QUEUE_PRIORITY_LOW (-2)

define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT 16_MIN

得到全局并行对列
dispatch_queue_t dispatch_get_global_queue(
disptch_queue_priority_t priority,unsigned long flags);
往对列中加入一个异步的block任务
void dispatch_async(dispatch_queue_t queue, dispatch_block_t block);
往对列中加入一个同步的block任务
void dispatch_sync(dispatch_queue_t queue, dispatch_block_t block);

ui主线程操作时间不可太长,从线程可以;主线程起一个线程,让从线程去做,启动线程的代码都是在主线程里面的,处理业务的代码都是放在从线程里面的。
NSThread的cancel(暂停按钮事件中表示在ui主线程中叫该工作线程对象退出);在从线程函数中判断当前线程是否被叫退出了,如果是,则退出,例如:
NSThread *currentThread = [NSThread currentThread];
if([currentThread isCancelled]){
[NSThread exit];//别人叫我退出了那我就退出
return;
}
线程主要是用在网络请求和数据处理上。
-(void)createThread{
//创建一个线程(工作线程),param1-2 :[self threadMain1:]线程的入口函数,param3表线程入口函数的参数
[NSThread detachNewThreadSelector:@selector(threadMain1:) toTarget:self withObject:nil];//一旦创建线程马上运行
}
-(void)threadMain1:(id)arg{
//这个函数就是在线程里面;这个函数不是在ui main thread中;_cmd表示当前函数
NSLog(@”in %@”,NSStringFromSelector(_cmd));
}
方式二:alloc ]init方式创建的线程不会自动运行 只有主动启动才能运行
NSThread *t = [[NSThread alloc] initWithTarget:self selector:@selector(threadMain3:) object:[NSNumber numberWithFloat:2]];
[t start];//让线程start
[NSThread exit];//当前线程退出
[NSThread currentThread];//在程序入口方法里获取的就是主线程,在跑在主线程的函数里这句代码获取的也是主线程;在从线程里这句代码获取的不是主线程是工作线程
判断主线程方法:
对象方法,返回布尔值 [currentThread isMainThread];
类方法,返回布尔值 [NSThread isMainThread];
线程锁NSLock
任何2个线程访问同一个共享资源(变量,数组等)都需要加锁,目的是为了保证同一时刻只能有一个线程访问共享资源。钥匙只能是一个线程拿,谁拿到就可以操作。
sumLock = [[NSLock alloc] init];
凡是对sum变量操作之前先要[sumLock lock]; 上锁,防止其他线程操作
sum+=i;
[sumLock unlock];解锁
锁加的太多会影响性能,加锁和解锁比较耗时间的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值