问题描述
我使用afnetworking发送一个post请求, 需要得到请求结果再执行下一步代码,现在我用过如下两种方式, 但都会造成程序卡住无法往下进行.但是我在另一个put请求用了相同的方法却可行, 哪位大神有了解过这种问题的?求解释
第一种: dispatch_semaphore_t
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];manager.requestSerializer = [AFJSONRequestSerializer serializer];__block dispatch_semaphore_t sem = dispatch_semaphore_create(0);[manager POST:@'http://172.16.100.85:8080/service/user/register' parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { self.requestResult = ProtocolErrorSuccess; if ([responseObject isKindOfClass:[NSDictionary class]]) {self.responseData = responseObject; } dispatch_semaphore_signal(sem);} failure:^(AFHTTPRequestOperation *operation, NSError *error) { self.requestResult = ProtocolErrorFailure; dispatch_semaphore_signal(sem);}];dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);if(self.requestResult == ProtocolErrorSuccess) { [self saveToken:self.responseData];}
第二种: NSCondition
__block NSCondition *condition = [[NSCondition alloc] init];[manager POST:@'http://172.16.100.85:8080/service/user/register' parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { self.requestResult = ProtocolErrorSuccess; if ([responseObject isKindOfClass:[NSDictionary class]]) {self.responseData = responseObject; } [condition lock]; [condition signal]; [condition unlock];} failure:^(AFHTTPRequestOperation *operation, NSError *error) { self.requestResult = ProtocolErrorFailure; [condition lock]; [condition signal]; [condition unlock];}];[condition lock];[condition wait];[condition unlock];if(self.requestResult == ProtocolErrorSuccess) { [self saveToken:self.responseData];}
问题解答
回答1:你方法锁住主线程能不卡住吗?success或者failure的block不是让你做下一步的事情的吗?