苹果开发 笔记(50)GCD
2015-07-15 23:21
645 查看
今天看了一些GCD 多线程异步执行的API。这些API看起来向一个函数,有一些人已经封测了它,变得更加直观和便于理解。下面先记录一些先。
一些常用的API
处理线程的API,有涉及到暂停,挂起,恢复,取消,等待、延迟执行,线程组,同步和异步 ,死锁,只执行一次,等系列的概念出现。这些概念大部分是对于处理线程和任务。
2015-7-19日 更新
在看gcd的时候,当中提及到线程过多时候,会引发内存问题。导致系统内存开销过多,效率降低。
同样多线程在更新相同一个资源的时候,会造成数据竞争的问题。
同步执行的时候容易出现死锁的问题,导致UI卡顿的问题发生。
系统提供了标准的Dispatch Queue
1.Main Dispatch Queue
2.Glocal Dispatch Queue
通过dispatch_get_global_queue 可以获取到不同等级的线程
通过dispatch_get_main_queue 获取主线程
2015-7-22日 更新
在书中看到一段关于刷新UI的做法,在后台执行循环,在主线程刷新UI。
2015-7-23日 更新
使用dispatch_once 构建一个单例
2015-7-24日 更新
使用dispatch_after 延迟 处理执行
一些常用的API
[code]//异步执行一个线程 dispatch_async(queue,^{}); //创建一个线程 dispatch_queue_t queue = dispatch_queuq_create("com.example.queue",NULL); //获取主线程的方法 dispatch_get_main_queue(); //优先级获取方法 dispath_queue_t queue = dispatch_get_global_queue(优先级,0); Dispatch Queue 的种类 有几种 //优先级常量 DISPATCH_QUEUE_PRIORITY_HIGH DISPATCH_QUEUE_PRIORITY_DEFAULT DISPATCH_QUEUE_PRIORITY_LOW DISPATCH_QUEUE_PRIORITY_BACKGROUND //延迟执行 dispatch_after dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW,3ull*NSEC_PER_SEC);
处理线程的API,有涉及到暂停,挂起,恢复,取消,等待、延迟执行,线程组,同步和异步 ,死锁,只执行一次,等系列的概念出现。这些概念大部分是对于处理线程和任务。
[code]dispatch_time_t dispatch_once_t dispatch_after dispatch_group_wait dispatch_release dispatch_barrier_async dispatch_async //异步 dispatch_sync //同步 dispatch_apply dispatch_io_create
2015-7-19日 更新
在看gcd的时候,当中提及到线程过多时候,会引发内存问题。导致系统内存开销过多,效率降低。
同样多线程在更新相同一个资源的时候,会造成数据竞争的问题。
同步执行的时候容易出现死锁的问题,导致UI卡顿的问题发生。
系统提供了标准的Dispatch Queue
1.Main Dispatch Queue
2.Glocal Dispatch Queue
通过dispatch_get_global_queue 可以获取到不同等级的线程
通过dispatch_get_main_queue 获取主线程
2015-7-22日 更新
在书中看到一段关于刷新UI的做法,在后台执行循环,在主线程刷新UI。
[code] dispatch_async(dispatch_get_global_queue(0,0),^{ NSInteger count = [numOfInstructions.text intValue]; for (int i = 0; i<count;i++) { dispatch_async(dispatch_get_main_queue(),^{ currentCount.text =[NSString stringWithFormat:@"instruction%d",i]; }); } });
2015-7-23日 更新
使用dispatch_once 构建一个单例
[code]+(SingleManager) shareManager { static dispatch_once_t once; static SingleManager *instance; dispatch_once(&once,^{ instance = [[self alloc]init]; } return instance; }
2015-7-24日 更新
使用dispatch_after 延迟 处理执行
[code] MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; hud.labelText =@"拼命加载中"; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 10 *NSEC_PER_SEC); dispatch_after(popTime, dispatch_get_main_queue(), ^{ [MBProgressHUD hideAllHUDsForView:self.view animated:YES]; });
相关文章推荐
- IOS面经系列(二)什么是id ,为什么要用id,在哪用id
- ios开发-inputView和inputAccessoryView
- iOS Scrollview中的AutoLayout(纯IB)
- 基于XMPP的IOS聊天客户端程序
- ios系列——权限
- IOS 链式调用
- iOS 监听键盘高度,输入框上升
- ios开发常用的第三方库
- iOS开发常用的第三方类库
- [纯代码/OC]IOS开发入门到进阶笔记20150715
- iOS常用控件
- iOS中的c第二天分支语句
- iOS中的c第一天基本数据类型
- IOS Quartz2D 相关
- iOS中runtime运行机制解析
- IOS学习笔记-OC初体验
- 【直播预告】7月19日iOS免费公开课答疑,参与送C币!
- 小胖说事29-----iOS中Navigation中左滑pop页面的三种方法
- iOS开发中那些高效常用的宏
- iOS设计模式之原型模式