dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); //建立信號量 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.requestSerializer.timeoutInterval = 5; manager.completionQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //若是以前請求有值,則異步就好,否則會卡主線程 if([OverallModel shareOverallModel].nSystemParameter){ dispatch_semaphore_signal(semaphore); } [manager GET:[AppURLRequest getSystemVekey] parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary *responseObject) { dispatch_semaphore_signal(semaphore);//無論請求狀態是什麼,都得發送信號,不然會一直卡着進程 NSInteger result = [[NSString stringWithFormat:@"%@",[responseObject objectForKey:@"result"]]integerValue]; if(result == 1){ NSString *nSystemParameter = NSZL(responseObject[@"data"][@"nSystemParameter"]); NSString *QQInfo = NSZL(responseObject[@"data"][@"QQInfo"]); [OverallModel shareOverallModel].nSystemParameter = nSystemParameter; [OverallModel shareOverallModel].QQInfo = QQInfo; } } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { dispatch_semaphore_signal(semaphore);//無論請求狀態是什麼,都得發送信號,不然會一直卡着進程 }]; dispatch_semaphore_wait(semaphore,DISPATCH_TIME_FOREVER); //等待
若是是在異步線程請求,則去掉 manager.completionQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);異步