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.
This commit is contained in:
Eric Patey 2012-07-10 21:12:54 -04:00
parent 7fda89e4a2
commit a8210a93bb

View File

@ -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;