iOS学习笔记 -- 多个网络请求的处理
程序员文章站
2022-06-02 19:07:01
...
在开发中,经常可以看见有这样的需求,就是一个方法要等另外一个方法执行完毕再做相对应的处理,比如说一些网络请求,需要根据上一个请求的返回值做相对应的处理再执行第二个请求,所以我们不能让两个请求同时去请求网络。下面通过GCD和NSOperationQueue来处理这个问题。
GCD方法:
//创建信号量
__block dispatch_semaphore_t test = dispatch_semaphore_create(0);
//创建队列
dispatch_queue_t queue = dispatch_queue_create("testBlock", NULL);
dispatch_async(queue, ^{
for (int i = 0; i< 4; i++)
{
NSLog(@"i的值是:%d",i);
tempStr = [NSString stringWithFormat:@"%d",i];
}
//发送通知
dispatch_semaphore_signal(test);
});
//信号量等待
dispatch_semaphore_wait(test, DISPATCH_TIME_FOREVER);
if([tempStr isEqualToString:@"5"])
{
for (int j = 0; j<5; j++)
{
NSLog(@"j的值是:%d",j);
}
}
NSOperationQueue 方法
//创建一个队列
NSOperationQueue * queueeTest = [[NSOperationQueue alloc]init];
//设置最线程数
queueeTest.maxConcurrentOperationCount = 4;
//创建一个a操作
NSBlockOperation * optionA = [NSBlockOperation blockOperationWithBlock:^{
for (int i = 0; i<10000; i++)
{
NSLog(@"i的值是:%d",i);
}
}];
//创建一个b操作
NSBlockOperation * optionB = [NSBlockOperation blockOperationWithBlock:^{
for (int j = 0; j<20000; j++)
{
NSLog(@"j的值是:%d",j);
}
}];
//B操作依赖于a操作
[optionB addDependency:optionA];
//分别加入队列
[queueeTest addOperation:optionA];
[queueeTest addOperation:optionB];
推荐阅读
-
iOS开发中使用NSURLConnection类处理网络请求的方法
-
ios蓝牙开发学习笔记(四)ios蓝牙应用的后台处理
-
iOS学习笔记-147.网络07——NSURLConnection04_简单JSON的解析
-
iOS学习笔记-143.网络03——自己搭建的后台登陆接口文档
-
【IOS学习】网络请求中的cookie
-
荐 从零写一个具有IOC-AOP-MVC功能的框架---学习笔记---11. MVC功能之http请求处理器的编写---简易框架最后一公里!
-
iOS学习笔记-141.网络01——使用Tomcat和JavaWeb来搭建自己的网络接口
-
iOS开发中使用NSURLConnection类处理网络请求的方法
-
iOS学习笔记 -- 多个网络请求的处理
-
iOS学习笔记-147.网络07——NSURLConnection04_简单JSON的解析