diff --git a/AFNetworking/AFHTTPRequestOperation.m b/AFNetworking/AFHTTPRequestOperation.m index 23695cb..0247377 100644 --- a/AFNetworking/AFHTTPRequestOperation.m +++ b/AFNetworking/AFHTTPRequestOperation.m @@ -23,6 +23,8 @@ #import "AFHTTPRequestOperation.h" #import "AFNetworkActivityIndicatorManager.h" +#define AFHTTPMinContentLength 1024 * 1024 * 8 + typedef enum { AFHTTPOperationReadyState = 1, AFHTTPOperationExecutingState = 2, @@ -107,6 +109,14 @@ static inline BOOL AFHTTPOperationStateTransitionIsValid(AFHTTPOperationState fr static NSThread *_networkRequestThread = nil; ++ (void)networkRequestThreadEntryPoint:(id)object { + do { + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + [[NSRunLoop currentRunLoop] run]; + [pool drain]; + } while (YES); +} + + (NSThread *)networkRequestThread { static dispatch_once_t oncePredicate; @@ -118,14 +128,6 @@ static NSThread *_networkRequestThread = nil; return _networkRequestThread; } -+ (void)networkRequestThreadEntryPoint:(id)object { - do { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - [[NSRunLoop currentRunLoop] run]; - [pool drain]; - } while (YES); -} - + (id)operationWithRequest:(NSURLRequest *)urlRequest completion:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSData *data, NSError *error))completion { @@ -246,16 +248,6 @@ static NSThread *_networkRequestThread = nil; return YES; } -- (void)start { - if (self.isFinished) { - return; - } - - self.state = AFHTTPOperationExecutingState; - - [self performSelector:@selector(operationDidStart) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:YES modes:[self.runLoopModes allObjects]]; -} - - (void)operationDidStart { self.connection = [[[NSURLConnection alloc] initWithRequest:self.request delegate:self startImmediately:NO] autorelease]; @@ -269,6 +261,16 @@ static NSThread *_networkRequestThread = nil; } +- (void)start { + if (self.isFinished) { + return; + } + + self.state = AFHTTPOperationExecutingState; + + [self performSelector:@selector(operationDidStart) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:YES modes:[self.runLoopModes allObjects]]; +} + - (void)cancel { self.isCancelled = YES; @@ -297,7 +299,10 @@ didReceiveResponse:(NSURLResponse *)response if (self.outputStream) { [self.outputStream open]; } else { - NSUInteger contentLength = MIN(MAX(abs(response.expectedContentLength), 1024), 1024 * 1024 * 8); + NSUInteger contentLength = MAX(abs(response.expectedContentLength), 1024); + if (contentLength < AFHTTPMinContentLength) { + contentLength = AFHTTPMinContentLength; + } self.dataAccumulator = [NSMutableData dataWithCapacity:contentLength]; } } diff --git a/AFNetworking/UIImageView+AFNetworking.h b/AFNetworking/UIImageView+AFNetworking.h index 0b79875..72a19ec 100644 --- a/AFNetworking/UIImageView+AFNetworking.h +++ b/AFNetworking/UIImageView+AFNetworking.h @@ -39,6 +39,6 @@ placeholderImage:(UIImage *)placeholderImage imageSize:(CGSize)imageSize options:(AFImageRequestOptions)options - block:(void (^)(UIImage *image))block; + block:(void (^)(UIImage *image, BOOL cacheUsed))block; @end diff --git a/AFNetworking/UIImageView+AFNetworking.m b/AFNetworking/UIImageView+AFNetworking.m index d1f5070..ebd483b 100644 --- a/AFNetworking/UIImageView+AFNetworking.m +++ b/AFNetworking/UIImageView+AFNetworking.m @@ -84,9 +84,12 @@ static NSString * const kUIImageViewImageRequestObjectKey = @"imageRequestOperat placeholderImage:(UIImage *)placeholderImage imageSize:(CGSize)imageSize options:(AFImageRequestOptions)options - block:(void (^)(UIImage *image))block + block:(void (^)(UIImage *image, BOOL cacheUsed))block { if (!url) { + // stop loading image + [self.imageRequestOperation cancel]; + self.imageRequestOperation = nil; return; } @@ -99,20 +102,22 @@ static NSString * const kUIImageViewImageRequestObjectKey = @"imageRequestOperat self.image = cachedImage; if (block) { - block(cachedImage); + block(cachedImage, YES); } } else { self.image = placeholderImage; self.imageRequestOperation = [AFImageRequestOperation operationWithRequest:request imageSize:imageSize options:options success:^(UIImage *image) { - if ([[request URL] isEqual:[[self.imageRequestOperation request] URL]]) { - self.image = image; - } else { - self.image = placeholderImage; - } - - if (block) { - block(image); + if (self.imageRequestOperation && ![self.imageRequestOperation isCancelled]) { + if (block) { + block(image, NO); + } + + if ([[request URL] isEqual:[[self.imageRequestOperation request] URL]]) { + self.image = image; + } else { + self.image = placeholderImage; + } } }];