From a8210a93bb4ab13e7cbcb32518f9f0f5f737101a Mon Sep 17 00:00:00 2001 From: Eric Patey Date: Tue, 10 Jul 2012 21:12:54 -0400 Subject: [PATCH] Fix threading issue with AFNetworkActivityIndicatorManager. Changed updateNetworkActivityIndicatorVisibilityDelayed to use the main run loop rather than the current run loop for its suppression timer. Also, avoided extra dispatch to the main queue when not needed. --- AFNetworking/AFNetworkActivityIndicatorManager.m | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/AFNetworking/AFNetworkActivityIndicatorManager.m b/AFNetworking/AFNetworkActivityIndicatorManager.m index b141323..53e388f 100644 --- a/AFNetworking/AFNetworkActivityIndicatorManager.m +++ b/AFNetworking/AFNetworkActivityIndicatorManager.m @@ -77,8 +77,8 @@ static NSTimeInterval const kAFNetworkActivityIndicatorInvisibilityDelay = 0.25; // Delay hiding of activity indicator for a short interval, to avoid flickering if (![self isNetworkActivityIndicatorVisible]) { [self.activityIndicatorVisibilityTimer invalidate]; - self.activityIndicatorVisibilityTimer = [NSTimer timerWithTimeInterval:kAFNetworkActivityIndicatorInvisibilityDelay target:self selector:@selector(updateNetworkActivityIndicatorVisibility) userInfo:nil repeats:NO]; - [[NSRunLoop currentRunLoop] addTimer:self.activityIndicatorVisibilityTimer forMode:NSRunLoopCommonModes]; + self.activityIndicatorVisibilityTimer = [NSTimer timerWithTimeInterval:kAFNetworkActivityIndicatorInvisibilityDelay target:self selector:@selector(updateNetworkActivityIndicatorVisibilityOnCurrentQueue) userInfo:nil repeats:NO]; + [[NSRunLoop mainRunLoop] addTimer:self.activityIndicatorVisibilityTimer forMode:NSRunLoopCommonModes]; } else { [self updateNetworkActivityIndicatorVisibility]; } @@ -91,10 +91,14 @@ static NSTimeInterval const kAFNetworkActivityIndicatorInvisibilityDelay = 0.25; - (void)updateNetworkActivityIndicatorVisibility { dispatch_async(dispatch_get_main_queue(), ^{ - [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:[self isNetworkActivityIndicatorVisible]]; + [self updateNetworkActivityIndicatorVisibilityOnCurrentQueue]; }); } +- (void)updateNetworkActivityIndicatorVisibilityOnCurrentQueue { + [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:[self isNetworkActivityIndicatorVisible]]; +} + // Not exposed, but used if activityCount is set via KVC. - (NSInteger)activityCount { return _activityCount;