通过信号量的方式,阻塞线程。达到同步AFNetworking的目的。
dispatch_semaphore_t sema = dispatch_semaphore_create(0);//创建一个为1信号量的信号
dispatch_queue_t queue = dispatch_queue_create("com.ERH", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue, ^{
[self.commonViewModel countryList:^(NSArray *arrCountry) {
long x = dispatch_semaphore_signal(sema);
NSLog(@"--%ld",x);
} queue:queue];
});
long x = dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
NSLog(@"--%ld",x);
需要注意的是,AFNetorking默认的返回是在主线程中执行,因为主线程被阻塞,所以需要设置AFNetworking的返回在子线程中执行。返回后修改信号量。