[Issue #278] Adding thread safety to incrementing / decrementing and display of network activity indicator
This commit is contained in:
parent
a0967f5d4f
commit
0470f4b29f
1 changed files with 17 additions and 7 deletions
|
|
@ -30,6 +30,7 @@ static NSTimeInterval const kAFNetworkActivityIndicatorInvisibilityDelay = 0.25;
|
||||||
@interface AFNetworkActivityIndicatorManager ()
|
@interface AFNetworkActivityIndicatorManager ()
|
||||||
@property (readwrite, nonatomic, assign) NSInteger activityCount;
|
@property (readwrite, nonatomic, assign) NSInteger activityCount;
|
||||||
@property (readwrite, nonatomic, retain) NSTimer *activityIndicatorVisibilityTimer;
|
@property (readwrite, nonatomic, retain) NSTimer *activityIndicatorVisibilityTimer;
|
||||||
|
@property (readwrite, nonatomic, retain) NSRecursiveLock *lock;
|
||||||
@property (readonly, getter = isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible;
|
@property (readonly, getter = isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible;
|
||||||
|
|
||||||
- (void)updateNetworkActivityIndicatorVisibility;
|
- (void)updateNetworkActivityIndicatorVisibility;
|
||||||
|
|
@ -38,6 +39,7 @@ static NSTimeInterval const kAFNetworkActivityIndicatorInvisibilityDelay = 0.25;
|
||||||
@implementation AFNetworkActivityIndicatorManager
|
@implementation AFNetworkActivityIndicatorManager
|
||||||
@synthesize activityCount = _activityCount;
|
@synthesize activityCount = _activityCount;
|
||||||
@synthesize activityIndicatorVisibilityTimer = _activityIndicatorVisibilityTimer;
|
@synthesize activityIndicatorVisibilityTimer = _activityIndicatorVisibilityTimer;
|
||||||
|
@synthesize lock = _lock;
|
||||||
@synthesize enabled = _enabled;
|
@synthesize enabled = _enabled;
|
||||||
@dynamic networkActivityIndicatorVisible;
|
@dynamic networkActivityIndicatorVisible;
|
||||||
|
|
||||||
|
|
@ -56,6 +58,8 @@ static NSTimeInterval const kAFNetworkActivityIndicatorInvisibilityDelay = 0.25;
|
||||||
if (!self) {
|
if (!self) {
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.lock = [[[NSRecursiveLock alloc] init] autorelease];
|
||||||
|
|
||||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(incrementActivityCount) name:AFNetworkingOperationDidStartNotification object:nil];
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(incrementActivityCount) name:AFNetworkingOperationDidStartNotification object:nil];
|
||||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(decrementActivityCount) name:AFNetworkingOperationDidFinishNotification object:nil];
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(decrementActivityCount) name:AFNetworkingOperationDidFinishNotification object:nil];
|
||||||
|
|
@ -69,10 +73,13 @@ static NSTimeInterval const kAFNetworkActivityIndicatorInvisibilityDelay = 0.25;
|
||||||
[_activityIndicatorVisibilityTimer invalidate];
|
[_activityIndicatorVisibilityTimer invalidate];
|
||||||
[_activityIndicatorVisibilityTimer release]; _activityIndicatorVisibilityTimer = nil;
|
[_activityIndicatorVisibilityTimer release]; _activityIndicatorVisibilityTimer = nil;
|
||||||
|
|
||||||
|
[_lock release];
|
||||||
|
|
||||||
[super dealloc];
|
[super dealloc];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setActivityCount:(NSInteger)activityCount {
|
- (void)setActivityCount:(NSInteger)activityCount {
|
||||||
|
[self.lock lock];
|
||||||
[self willChangeValueForKey:@"activityCount"];
|
[self willChangeValueForKey:@"activityCount"];
|
||||||
_activityCount = MAX(activityCount, 0);
|
_activityCount = MAX(activityCount, 0);
|
||||||
[self didChangeValueForKey:@"activityCount"];
|
[self didChangeValueForKey:@"activityCount"];
|
||||||
|
|
@ -87,6 +94,7 @@ static NSTimeInterval const kAFNetworkActivityIndicatorInvisibilityDelay = 0.25;
|
||||||
[self updateNetworkActivityIndicatorVisibility];
|
[self updateNetworkActivityIndicatorVisibility];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
[self.lock unlock];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)isNetworkActivityIndicatorVisible {
|
- (BOOL)isNetworkActivityIndicatorVisible {
|
||||||
|
|
@ -94,19 +102,21 @@ static NSTimeInterval const kAFNetworkActivityIndicatorInvisibilityDelay = 0.25;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)updateNetworkActivityIndicatorVisibility {
|
- (void)updateNetworkActivityIndicatorVisibility {
|
||||||
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:[self isNetworkActivityIndicatorVisible]];
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
|
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:[self isNetworkActivityIndicatorVisible]];
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)incrementActivityCount {
|
- (void)incrementActivityCount {
|
||||||
@synchronized(self) {
|
[self.lock lock];
|
||||||
self.activityCount += 1;
|
self.activityCount += 1;
|
||||||
}
|
[self.lock unlock];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)decrementActivityCount {
|
- (void)decrementActivityCount {
|
||||||
@synchronized(self) {
|
[self.lock lock];
|
||||||
self.activityCount -= 1;
|
self.activityCount -= 1;
|
||||||
}
|
[self.lock unlock];
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue