objc 多线程小计

 

 

GCD一个代替NSThread等线程的技术。可以处理数据锁定和资源泄露登异步编程问题。

GCD原理:让一个程序,根据可用的处理资源,平行排队执行一个任务。

GCD中的一个任务可以被放置于一个适当的队列中。这样比一个个执行任务的方式更有效率。

 

GCD队列:

只要给GCD提供执行代码块, 用于在 系统或用户 创建的队列上调度运行。

1声明一个用户队列:

dispatch_queue_tmyQueue = dispatch_queue_create(“myQueue_flag”,NULL);

2执行一个 异步执行 列队:

dispatch_async(myQueue,^{[self dosomething];})

3声明并执行:

dispatch_async(dispatch_queue_create(“myQueue_flag”,NULL),^{[self dosomething];})

4暂停一个列队:

dispatch_suspend(myQueue);

5主线程上运行代码:

dispatch_sync(dispatch_get_main_queue(),^{ [self doSometinginMainWindow] });

 

ps:dispatch_get_global_queue(0, 0);获得程序是并发的。有优先级高中低,三个队列。并且三个队列不代表三个线程,可能会有很多线程。

 

Dispatch_get_main_queue();主线程的队列,是一个串行队列。

 

6

一dispatch_async(queue,^{

                  //block 代码

})//异步执行代码

可以用异步来执行后台程序

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{

  //子线程中开始网络请求数据

  //更新数据模型

  dispatch_sync(dispatch_get_main_queue(), ^{

    //在主线程中更新UI代码

  });

});

 

二 dispatch_sync(

queue, ^{

                  //block 代码

})//同步执行代码

可以用同步来实现简单死锁

-(void)writeDB:(NSData *)data

{

  dispatch_sync(queue1, ^{

    //dosomething

  });

} 

我的理解是 把多次调用dosomething放到一个队列中,下次调用时必须要等上次调用完成后才能进行,所以线程是安全的。

 

7 dispatch_apply(count,queue, ^{

//dosomething

})

count是个迭代器,而且多个block执行时是否并发或者串行依赖于queue的队列是否是并发或者串行的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值