[RunLoop 让返回值在耗时操作完成后返回]
来源:互联网 发布:西直门桥主要数据 编辑:程序博客网 时间:2024/06/05 18:41
有这么样一个需求
- (NSString*)waittingFunc{ // 这里执行耗时操作 NSString *param = [self 某耗时操作方法]; return param;}
可以预见的是, waittingFunc()的运行结果一定是返回nil,
而不是等到耗时操作执行完成,且有值返回赋值给param之后,才执行 return param;
因此,就需要一个办法, 让 return param;
延迟到耗时操作有返回值给到 param之后, 再进行.
如上图
可以把耗时等到的方法 加入循环中
//将耗时操作加入事件循环
[NSThread detachNewThreadSelector:@selector(waitLongitudeAndLatitude)toTarget:self withObject:nil];
可以看到
while(!_runLoopOver){
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
在循环结束标识一直未No的过程中, 线程一直被等待,直到循环结束标识在耗时操作成功且被修改为Yes之后, 事件循环才得以跳出,return
操作才得以继续.
如果想要耗时完成后直接回调,也可以这样写
_runLoopOver 循环结束标识初始化为NO,等耗时操作完成,修改循环结束标识为YES,即可跳出循环,代码继续执行,完成回调
- (NSArray *)startUpdatingLocation{ //循环结束标识 - 初始化 _runLoopOver = NO; //开始定位 - 等待回调 - 耗时操作 [self.locationManager startUpdatingLocation]; //只要循环结束标识为NO,则当前流程一直等待,(仅当前流程等待,不影响其他线程执行或整个程序执行) while(!_runLoopOver){ [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]; } //一旦获取经纬度数组回调, 则当前流程执行返回值返回 if (_runLoopOver) { return _locationArr; }}
阅读全文
1 0
- [RunLoop 让返回值在耗时操作完成后返回]
- Winform异步解决窗体耗时操作(Action专门用于无返回值,Func专门用于有返回值)
- Mybatis insert 完成后返回主键
- Mybatis插入完成后返回主键
- 完成线程CompletionService返回值操作(按完成操作的线程的先后打印)
- 让表单提交返回后保持在原来提交的位置上
- 【转载】[JS]让表单提交返回后保持在原来提交的位置上
- NSInvocation在获取返回值后crash问题
- NSInvocation在获取返回值后crash问题
- NSInvocation在获取返回值后crash问题
- NSInvocation在获取返回值后crash问题
- 为什么在mysql_query()返回成功后,mysql_store_result()有时返回NULL?
- 操作成功后,返回上一页(转)
- 选择屏幕执行完成返回后,屏幕出错
- 关于Android调用相机拍照,完成后无法返回
- jquery mobile 加载完成后,自动返回顶部
- Android App首次安装完成后在安装界面直接打开应用,再按home键返回桌面,从桌面图标重新进入app,返回不到之前的界面问题
- 系统在10秒后返回首页
- ubuntu根目录空间不够用
- Nginx实现HTTP负载均衡和TCP负载均衡
- codevs 1860 最大数
- java自学笔记4:java中的多态
- 欢迎使用CSDN-markdown编辑器
- [RunLoop 让返回值在耗时操作完成后返回]
- android jni 中的事件回调机制JNIenv的使用
- arduino + esp8266+ ds18b20 采集温度上传贝壳网
- rabbitmq channel接口常用方法详解
- Description Resource Path Location Type Java compiler level does not match the version o
- Python文件
- 计算机相关技术资料整理
- 积分图像算法
- JS基础学习第三天:变量是什么?什么是数组以及数组的方法?