在开发中,经常可以看见有这样的需求,就是一个方法要等另外一个方法执行完毕再做相对应的处理,比如说一些网络请求,需要根据上一个请求的返回值做相对应的处理再执行第二个请求,所以我们不能让两个请求同时去请求网络。下面通过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;
NSBlockOperation * optionA = [NSBlockOperation blockOperationWithBlock:^{
for (int i = 0; i<10000; i++)
{
NSLog(@"i的值是:%d",i);
}
}];
NSBlockOperation * optionB = [NSBlockOperation blockOperationWithBlock:^{
for (int j = 0; j<20000; j++)
{
NSLog(@"j的值是:%d",j);
}
}];
[optionB addDependency:optionA];
[queueeTest addOperation:optionA];
[queueeTest addOperation:optionB];