ios - GCD简单小结
2016-04-26 14:04
239 查看
首先GCD两个名词: 队列 同步异步.
队列: 任务放到队列,队列中的任务执行方式取决于执行队列中任务的方式---同步异步.
串行队列: 任务顺序执行,可以叫阻塞队列.只有前面任务完成才执行后面的.
并发队列: 开启新的线程执行任务,不会阻塞主线程.
同步异步:是队列中任务执行的方式,同步也就是任务在一个线程中顺序执行属于会'阻塞'主线程,异步:不会阻塞主线程,可以开启新线程.
dispatch_sync(queue, block) //同步执行 dispatch_async (queue, block) //异步执行 dispatch_after(time, queue, block) //同步延迟执行
queue第一个参数,"队列",有三种:全局队列,主队列,自己创建的队列.
全局队列:默认是并发队列,---可以开启新线程
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
并发队列第一个参数是在全局队列的优先级. 有 默认 , 高, 低,后台 四种
主队列: 串行队列
自己创建的队列:
dispatch_queue_create("com.hello", NULL)
第二个参数 NULL 代表创建的是串行队列.如果是DISPATCHQUEUECONCURRENT 代表并发队列(ios 4.3以后出现的)
线程是不安全的,多个线程在访问系统同一资源的时候会造成想不到的错误:例如银行存取钱,买票 案例
解决办法就是给线程加上锁,自带内部同步锁,或者自己创建一个同步锁,下面演示自己创建的同步锁
_syncQueue = dispatch_queue_create("com.effectiveObjectiveC.syncQueue", NULL); - (NSString *)someString { __weak NSString *localSomeString; dispatch_sync(_syncQueue, ^{ localSomeString = _someString; }); return localSomeString; } - (void)setSomeString:(NSString *)someString { dispatch_sync(_syncQueue, ^{ _someString = someString; }); }
相关文章推荐
- iOS 平台如何使用 TestFlight 进行 Beta 测试
- iOS中的单例模式
- iOS屏幕旋转
- iOS程序启动原理
- ios导航栏透明
- iOS 开发系列之在应用中添加TouchID 验证身份
- iOS集成友盟分享时的一些问题
- ios十进制、十六进制字符串,byte,data等之间的转换
- IOS适配-快速适配篇
- IOS适配-原理篇
- iOS系统函数执行顺序
- iOS8初探 - Size Class
- iOS组件封装的思路和实现
- Facebook iOS 应用是如何加速图片显示的?
- iOS界面卡顿之离屏渲染
- 话谈 iOS 目录结构的划分
- JS传递数据给IOS Android
- 整理iOS9适配中出现的坑(图文)
- 在 iOS创建 第一个Cordova 项目
- ios 审核加急快速上架