2015-03-08 115 views
1

有谁知道AFNetworking的调用是否会自动调度到后台线程?AFNetworking是否会自动在后台线程上执行操作?

例如,这里就是我有...

ServerAccessLayer.m

- (void)fetchWithurlString:(NSString *)urlString andCompletion:(APIResponseObjectBlock)completion 
{ 
    [[WebClient sharedClient] fetchDictionaryWithURLString:urlString success:^(AFHTTPRequestOperation *operation, id responseObject) { 
     if (completion) { 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       completion(YES, responseObject, operation.response.statusCode, nil, nil); 
      }); 
     } 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error, NSInteger statusCode, id responseObject) { 
     if (completion) { 
      NSArray *messages = [self generateResponseArray:responseObject withDataType:MESSAGE]; 
      NSArray *errors = [self generateResponseArray:responseObject withDataType:ERROR]; 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       completion(NO, responseObject, statusCode, messages, errors); 
      }); 
     } 
    }]; 
} 

WebClient.m

- (void)fetchDictionaryWithURLString:(NSString *)urlString success:(void (^)(AFHTTPRequestOperation *, id))success failure:(void (^)(AFHTTPRequestOperation *, NSError *, NSInteger, id))failure 
{ 
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
    [manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { 
     success(operation, responseObject); 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     failure(operation, error, ((NSHTTPURLResponse *)operation.response).statusCode, operation.responseObject); 
    }]; 
} 

在ServerAccessLayer,我派遣完成的代码回主线。当我很久以前写这段代码时,出于某种原因,我的假设是当使用AFHTTPRequestOperationManager时,它会自动派发到后台线程,所以我没有实现它。现在,我似乎无法找到任何证据,并且我想知道我是否实际上没有在后台线程上调用任何网络调用。

有人可以验证AFHTTPRequestOperationManager是否自动在后台线程上工作,还是需要自己处理?

+0

是的,它确实去回线程 – 2015-03-08 19:28:40

回答

3

AFNetwork是开源的,所以实际上你可以查看自己所有的代码在Github上:https://github.com/AFNetworking/AFNetworking

看着AFHTTPRequestOperationManager,你可以看到,它会创建自己操作队列时,它的初始化。所有的网络请求都发生在这个操作队列上。然后,默认情况下,将完成和失败块分派回主队列。

总之,您的网络操作将在后台进行,但您的successfailure块将位于主队列中。

相关问题