我使用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];
}
你方法鎖住主執行緒能不卡住嗎?
success
或者failure
的block不是讓你做下一步的事情的嗎?