我使用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];
}
Can you lock the main thread without getting stuck?
success
或者failure
Don’t the blocks let you do the next thing?