美文网首页
iOS流程控制问题

iOS流程控制问题

作者: Leo_5cdb | 来源:发表于2017-11-14 15:01 被阅读0次

最近在一个项目中遇到了一个流程控制问题。

app在启动过程中需要先去验证网络,网络验证通过了。再去请求一个秘钥。请求秘钥之后再去验证服务器的配置版本和当地的版本是否一致。这么说可能很多人会蒙圈了。其实说白了就是app启动的时候需要做三次网络请求且有一定的顺序。但是各个接口的速度和当时的网络情况等等。如果不加控制。有可能几件事情的顺序乱掉。而且要求一个进度卡住了 需要重新走下该流程。即如果秘钥没有拿到。那么需要重新检查网络。再次获取秘钥和app版本验证。

上代码

先创建函数主体,

- (id)startWithDelegate{

//第一步:检查网络

NSBlockOperation *operation1 = [NSBlockOperation blockOperationWithBlock:^{

[self checkNetWork];

}];

//第二步:获取key

NSBlockOperation *operation2 = [NSBlockOperation blockOperationWithBlock:^{

[self getKeyForServer];

}];

//第三步:检测服务器版本

NSBlockOperation *operation3 = [NSBlockOperation blockOperationWithBlock:^{

[self checkVersionFromServer];

}];

//设置依赖

[operation2 addDependency:operation1];      //任务二依赖任务一

[operation3 addDependency:operation2];      //任务三依赖任务二

//创建队列

_queue= [[NSOperationQueue alloc] init];

[_queue addOperations:@[operation3, operation2, operation1] waitUntilFinished:NO];

return nil;

}

建立三个任务建立依赖关系。 这样并不能完全控制几个任务的流程。还需要借助信号量。

信号量的问题不懂得请自行百度去。

//检查网络是否通畅

- (BOOL )checkNetWork{

//创建信号量并设置计数默认为0

dispatch_semaphore_t sema = dispatch_semaphore_create(0);

dispatch_async(dispatch_get_main_queue(), ^{

BOOL isConnect = [AD isConnectionAvailable];

if (isConnect) {

//通过了网络验证 通知信号量继续执行下边的功能

dispatch_semaphore_signal(sema);// 这行之行完毕才return结果。

}else{

 //网络验证出现问题。弹出对话框。   

[self showMessage:@"当前网络异常,请检查你的网络" tag:1];

}

//若计数为0则一直等待

dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);

return isConnect;

}

在弹出信息的代理中 处理队列中的任务。

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{

if (alertView.tag == 1) {

if (_queue) {

[_queue cancelAllOperations];

}

[[DNEBridgeHelper sharedInstance] startWithDelegate];

}

}

代码如上。自行体会去吧。

本文参考

http://www.jianshu.com/p/342b2ffbdd97

相关文章

  • iOS流程控制问题

    最近在一个项目中遇到了一个流程控制问题。 app在启动过程中需要先去验证网络,网络验证通过了。再去请求一个秘钥。请...

  • View的声明周期详解

    iOS控制器平时总调用viewDidload其流程也是从 viewDidLoad->viewWillAppear ...

  • 2018-04-09

    原文:IOS状态栏和导航栏的控制问题 IOS的项目多数会遇到控制状态栏和导航栏的问题,比如隐藏状态栏、控制状态栏的...

  • iOS7之后的导航栏与控制器原点坐标问题

    iOS7之后的导航栏与控制器原点坐标问题   简单记录关于iOS7之后有导航控制器的控制器view原点坐标问题(v...

  • 文章收集

    关于视图的周期流程一篇文章揭秘 iOS 布局相关问题 封装SDK流程iOS 自己封装的SDK 打包与合并,新手教程...

  • Fastlane自动化构建工具(完整解决测试和发布流程)

    Fastlane自动化构建工具(完整解决测试和发布流程) 控制整体流程和实现的框架容器支持平台:iOS、Andro...

  • Fastlane

    Fastlane自动化构建工具(完整解决测试和发布流程) 控制整体流程和实现的框架容器支持平台:iOS、Andro...

  • 收录 : iOS支付开发

    iOS 银联支付开发流程iOS 微信支付开发流程iOS 支付宝支付开发流程iOS Apple Pay开发流程App...

  • 导航栏和状态栏

    IOS状态栏和导航栏的控制问题

  • 5-流程控制

    流程控制 流程 计算机执行代码的顺序就是流程 流程控制 对计算机代码执行顺序的管理就是流程控制 流程分类 流程控制...

网友评论

      本文标题:iOS流程控制问题

      本文链接:https://www.haomeiwen.com/subject/ycqfvxtx.html