iOS NSCondition
来源:互联网 发布:黑帽seo劫持 编辑:程序博客网 时间:2024/05/22 10:46
iOS NSCondition讲解
1.定义
官方文档:The NSCondition class implements a condition variable whose semantics follow those used for POSIX-style conditions. A condition object acts as both a lock and a checkpoint in a given thread. The lock protects your code while it tests the condition and performs the task triggered by the condition. The checkpoint behavior requires that the condition be true before the thread proceeds with its task. While the condition is not true, the thread blocks. It remains blocked until another thread signals the condition object.
NSCondition 的对象实际上作为一个锁和一个线程检查器:锁主要为了当检测条件时保护数据源,执行条件引发的任务;线程检查器主要是根据条件决定是否继续运行线程,即线程是否被阻塞。
2.使用
NSConditon *condition =[ [NSCondition alloc]]init;
[condition lock];//一般用于多线程同时访问、修改同一个数据源,保证在同一时间内数据源只被访问、修改一次,其他线程的命令需要在lock 外等待,只到unlock ,才可访问
[condition unlock];//与lock 同时使用
[condition wait];//让当前线程处于等待状态
[condition signal];//CPU发信号告诉线程不用在等待,可以继续执行
3.代码学习:
代码分析:condition 进入到判断条件中,当products == 0 的时候,condition 调用wait 时当前线程处于等待状态;其他线程开始访问products,当NSObject 创建完成并加入到products时,cpu发出single的信号时,处于等待的线程被唤醒,开始执行[products removeObjectAtIndex:0];
3.使用场景:
目前我主要使用于图片消息:
当接受到图片消息的时候,需要异步下载,等到图片下载完成之后,同步数据库,方可通知前端更新UI。此时就需要使用NSCondition 的wait
//伪代码
- (void)receiveMessage:(MessageEntity *)message
{
NSCondition *condition = [[NSCondition alloc]init];
[condition lock];
NSInteger imageCount ;
void(^unlock)=^(){
while(!imageCount)
[condition signal];
}
imageCount++;
dowanloadImageFinished:^(UIImage *image){ //异步下载图片,下载完成的回调中
imageCount--;
unlock();
}
while(imageCount){
[condition wait];
}
[condition unLock];
}
作者:九零猴VS久林
链接:http://www.jianshu.com/p/5d20c15ae690
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
- iOS NSCondition
- iOS NSCondition
- iOS NSCondition讲解
- ios线程阻塞之NSCondition
- 【NSCondition】
- NSCondition
- NSCondition
- iOS线程之——NSCondition
- iOS线程之——NSCondition
- iOS线程之——NSCondition
- IOS NSConditionLock 条件锁 NSCondition 断言
- IOS NSConditionLock 条件锁 NSCondition 断言
- IOS NSLocking协议,NSLock,NSConditionLock,NSRecursiveLock,NSCondition
- iOS NSCondition结合代码以及项目进行详解
- IOS 多线程编程_NSLock,NSCondition,synchronized和生产者消费者模型
- ios中的锁(Lock) NSLock,NSConditionLock,NSRecursiveLock,NSCondition
- 理解NSCondition
- NSCondition使用方法
- 色环电阻识别
- LTS分布式任务框架light-task-scheduler环境搭建
- Spring中注解和注入
- 递归与动态规划---龙与地下城游戏问题
- css3鼠标经过,图片旋转
- iOS NSCondition
- ImageCaption算法总结
- python dbapi 2.0
- Maven的使用
- Java 加载、链接、初始化
- php核心学习-设计模式的学习-观察者模式
- Java 格式化数字--- DecimalFormat
- 为了下载资料奋斗积分
- struts2入门学习知识点(待完善)