diff --git a/AFNetworking/AFHTTPRequestOperation.h b/AFNetworking/AFHTTPRequestOperation.h index ea6bfd0..122099e 100644 --- a/AFNetworking/AFHTTPRequestOperation.h +++ b/AFNetworking/AFHTTPRequestOperation.h @@ -74,12 +74,12 @@ @property (readonly) BOOL hasAcceptableContentType; /** - The callback dispatch queue on success. If this is NULL (default), the main queue is used. + The callback dispatch queue on success. If `NULL` (default), the main queue is used. */ @property (nonatomic) dispatch_queue_t successCallbackQueue; /** - The callback dispatch queue on failure. If this is NULL (default), the main queue is used. + The callback dispatch queue on failure. If `NULL` (default), the main queue is used. */ @property (nonatomic) dispatch_queue_t failureCallbackQueue; @@ -107,18 +107,3 @@ failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; @end - - -@interface AFHTTPRequestOperation (AFInternal) - -/** - Executes the successBlock on the corresponding successCallbackQueue. - */ -- (void)dispatchSuccessBlock:(void (^)(AFHTTPRequestOperation *operation, id responseObject))successBlock responseObject:(id)responseObject; - -/** - Executes the failureBlock on the corresponding failureCallbackQueue. - */ -- (void)dispatchFailureBlock:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failureBlock; - -@end \ No newline at end of file diff --git a/AFNetworking/AFHTTPRequestOperation.m b/AFNetworking/AFHTTPRequestOperation.m index 591c56e..b20c406 100644 --- a/AFNetworking/AFHTTPRequestOperation.m +++ b/AFNetworking/AFHTTPRequestOperation.m @@ -49,8 +49,17 @@ [_acceptableStatusCodes release]; [_acceptableContentTypes release]; [_HTTPError release]; - if (_successCallbackQueue) { dispatch_release(_successCallbackQueue), _successCallbackQueue=NULL;} - if (_failureCallbackQueue) { dispatch_release(_failureCallbackQueue), _failureCallbackQueue=NULL;} + + if (_successCallbackQueue) { + dispatch_release(_successCallbackQueue); + _successCallbackQueue = NULL; + } + + if (_failureCallbackQueue) { + dispatch_release(_failureCallbackQueue); + _failureCallbackQueue = NULL; + } + [super dealloc]; } @@ -92,7 +101,6 @@ - (void)setSuccessCallbackQueue:(dispatch_queue_t)successCallbackQueue { if (successCallbackQueue != _successCallbackQueue) { - if (_successCallbackQueue) { dispatch_release(_successCallbackQueue); } @@ -106,7 +114,6 @@ - (void)setFailureCallbackQueue:(dispatch_queue_t)failureCallbackQueue { if (failureCallbackQueue != _failureCallbackQueue) { - if (_failureCallbackQueue) { dispatch_release(_failureCallbackQueue); } @@ -127,9 +134,17 @@ } if (self.error) { - [self dispatchFailureBlock:failure]; + if (failure) { + dispatch_async(self.failureCallbackQueue ? self.failureCallbackQueue : dispatch_get_main_queue(), ^{ + failure(self, self.error); + }); + } } else { - [self dispatchSuccessBlock:success responseObject:self.responseString]; + if (success) { + dispatch_async(self.successCallbackQueue ? self.successCallbackQueue : dispatch_get_main_queue(), ^{ + success(self, self.responseString); + }); + } } }; } @@ -140,22 +155,4 @@ return YES; } -#pragma mark - AFInternal - -- (void)dispatchSuccessBlock:(void (^)(AFHTTPRequestOperation *operation, id responseObject))successBlock responseObject:(id)responseObject { - if (successBlock) { - dispatch_async(self.successCallbackQueue ? self.successCallbackQueue : dispatch_get_main_queue(), ^{ - successBlock(self, responseObject); - }); - } -} - -- (void)dispatchFailureBlock:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failureBlock { - if (failureBlock) { - dispatch_async(self.failureCallbackQueue ? self.failureCallbackQueue : dispatch_get_main_queue(), ^{ - failureBlock(self, self.error); - }); - } -} - @end diff --git a/AFNetworking/AFImageRequestOperation.m b/AFNetworking/AFImageRequestOperation.m index f732a3c..de8237e 100644 --- a/AFNetworking/AFImageRequestOperation.m +++ b/AFNetworking/AFImageRequestOperation.m @@ -109,11 +109,11 @@ static dispatch_queue_t image_request_operation_processing_queue() { [requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { if (success) { NSImage *image = responseObject; - + if (imageProcessingBlock) { image = imageProcessingBlock(image); } - + success(operation.request, operation.response, image); } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { @@ -230,9 +230,17 @@ static dispatch_queue_t image_request_operation_processing_queue() { dispatch_async(image_request_operation_processing_queue(), ^(void) { if (self.error) { - [self dispatchFailureBlock:failure]; + if (failure) { + dispatch_async(self.failureCallbackQueue ? self.failureCallbackQueue : dispatch_get_main_queue(), ^{ + failure(self, self.error); + }); + } } else { - [self dispatchSuccessBlock:success responseObject:self.responseImage]; + if (success) { + dispatch_async(self.successCallbackQueue ? self.successCallbackQueue : dispatch_get_main_queue(), ^{ + success(self, self.responseImage); + }); + } } }); }; diff --git a/AFNetworking/AFJSONRequestOperation.m b/AFNetworking/AFJSONRequestOperation.m index 6d39413..9046dd0 100644 --- a/AFNetworking/AFJSONRequestOperation.m +++ b/AFNetworking/AFJSONRequestOperation.m @@ -124,15 +124,27 @@ static dispatch_queue_t json_request_operation_processing_queue() { } if (self.error) { - [self dispatchFailureBlock:failure]; + if (failure) { + dispatch_async(self.failureCallbackQueue ? self.failureCallbackQueue : dispatch_get_main_queue(), ^{ + failure(self, self.error); + }); + } } else { dispatch_async(json_request_operation_processing_queue(), ^(void) { id JSON = self.responseJSON; if (self.JSONError) { - [self dispatchFailureBlock:failure]; + if (failure) { + dispatch_async(self.failureCallbackQueue ? self.failureCallbackQueue : dispatch_get_main_queue(), ^{ + failure(self, self.error); + }); + } } else { - [self dispatchSuccessBlock:success responseObject:JSON]; + if (success) { + dispatch_async(self.successCallbackQueue ? self.successCallbackQueue : dispatch_get_main_queue(), ^{ + success(self, JSON); + }); + } } }); } diff --git a/AFNetworking/AFPropertyListRequestOperation.m b/AFNetworking/AFPropertyListRequestOperation.m index d294cd2..ea9d216 100644 --- a/AFNetworking/AFPropertyListRequestOperation.m +++ b/AFNetworking/AFPropertyListRequestOperation.m @@ -124,15 +124,27 @@ static dispatch_queue_t property_list_request_operation_processing_queue() { } if (self.error) { - [self dispatchFailureBlock:failure]; + if (failure) { + dispatch_async(self.failureCallbackQueue ? self.failureCallbackQueue : dispatch_get_main_queue(), ^{ + failure(self, self.error); + }); + } } else { dispatch_async(property_list_request_operation_processing_queue(), ^(void) { id propertyList = self.responsePropertyList; if (self.propertyListError) { - [self dispatchFailureBlock:failure]; - }else { - [self dispatchSuccessBlock:success responseObject:propertyList]; + if (failure) { + dispatch_async(self.failureCallbackQueue ? self.failureCallbackQueue : dispatch_get_main_queue(), ^{ + failure(self, self.error); + }); + } + } else { + if (success) { + dispatch_async(self.successCallbackQueue ? self.successCallbackQueue : dispatch_get_main_queue(), ^{ + success(self, propertyList); + }); + } } }); } diff --git a/AFNetworking/AFXMLRequestOperation.m b/AFNetworking/AFXMLRequestOperation.m index 7b50fd6..79c5272 100644 --- a/AFNetworking/AFXMLRequestOperation.m +++ b/AFNetworking/AFXMLRequestOperation.m @@ -24,7 +24,6 @@ #include -#if __MAC_OS_X_VERSION_MIN_REQUIRED static dispatch_queue_t af_xml_request_operation_processing_queue; static dispatch_queue_t xml_request_operation_processing_queue() { if (af_xml_request_operation_processing_queue == NULL) { @@ -33,14 +32,13 @@ static dispatch_queue_t xml_request_operation_processing_queue() { return af_xml_request_operation_processing_queue; } -#endif @interface AFXMLRequestOperation () @property (readwrite, nonatomic, retain) NSXMLParser *responseXMLParser; #if __MAC_OS_X_VERSION_MIN_REQUIRED @property (readwrite, nonatomic, retain) NSXMLDocument *responseXMLDocument; #endif -@property (readwrite, nonatomic, retain) NSError *error; +@property (readwrite, nonatomic, retain) NSError *XMLError; + (NSSet *)defaultAcceptableContentTypes; + (NSSet *)defaultAcceptablePathExtensions; @@ -51,7 +49,7 @@ static dispatch_queue_t xml_request_operation_processing_queue() { #if __MAC_OS_X_VERSION_MIN_REQUIRED @synthesize responseXMLDocument = _responseXMLDocument; #endif -@synthesize error = _XMLError; +@synthesize XMLError = _XMLError; + (AFXMLRequestOperation *)XMLParserRequestOperationWithRequest:(NSURLRequest *)urlRequest success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser))success @@ -76,34 +74,20 @@ static dispatch_queue_t xml_request_operation_processing_queue() { success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLDocument *document))success failure:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, NSXMLDocument *document))failure { - AFXMLRequestOperation *operation = [[[self alloc] initWithRequest:urlRequest] autorelease]; - operation.completionBlock = ^ { - if ([operation isCancelled]) { - return; + AFXMLRequestOperation *requestOperation = [[[self alloc] initWithRequest:urlRequest] autorelease]; + [requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, __unused id responseObject) { + if (success) { + NSXMLDocument *XMLDocument = [(AFXMLRequestOperation *)operation responseXMLDocument]; + success(operation.request, operation.response, XMLDocument); } - - if (operation.error) { - if (failure) { - NSXMLDocument *XMLDocument = operation.responseXMLDocument; - - dispatch_async(dispatch_get_main_queue(), ^(void) { - failure(operation.request, operation.response, operation.error, XMLDocument); - }); - } - } else { - dispatch_async(xml_request_operation_processing_queue(), ^(void) { - if (success) { - NSXMLDocument *XMLDocument = operation.responseXMLDocument; - - dispatch_async(dispatch_get_main_queue(), ^(void) { - success(operation.request, operation.response, XMLDocument); - }); - } - }); + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + if (failure) { + NSXMLDocument *XMLDocument = [(AFXMLRequestOperation *)operation responseXMLDocument]; + failure(operation.request, operation.response, error, XMLDocument); } - }; + }]; - return operation; + return requestOperation; } #endif @@ -151,7 +135,7 @@ static dispatch_queue_t xml_request_operation_processing_queue() { if (!_responseXMLDocument && [self.responseData length] > 0 && [self isFinished]) { NSError *error = nil; self.responseXMLDocument = [[[NSXMLDocument alloc] initWithData:self.responseData options:0 error:&error] autorelease]; - self.error = error; + self.XMLError = error; } return _responseXMLDocument; @@ -186,11 +170,23 @@ static dispatch_queue_t xml_request_operation_processing_queue() { return; } - if (self.error) { - [self dispatchFailureBlock:failure]; - } else { - [self dispatchSuccessBlock:success responseObject:self.responseXMLParser]; - } + dispatch_async(xml_request_operation_processing_queue(), ^(void) { + NSXMLParser *XMLParser = self.responseXMLParser; + + if (self.error) { + if (failure) { + dispatch_async(self.failureCallbackQueue ? self.failureCallbackQueue : dispatch_get_main_queue(), ^{ + failure(self, self.error); + }); + } + } else { + if (success) { + dispatch_async(self.successCallbackQueue ? self.successCallbackQueue : dispatch_get_main_queue(), ^{ + success(self, XMLParser); + }); + } + } + }); }; }