[Issue #375] Restore support for non-GCC compilers in AFNetworkActivityIndicatorManager
This commit is contained in:
parent
286b8100c5
commit
a0f592c23a
1 changed files with 14 additions and 9 deletions
|
|
@ -23,13 +23,12 @@
|
||||||
#import "AFNetworkActivityIndicatorManager.h"
|
#import "AFNetworkActivityIndicatorManager.h"
|
||||||
|
|
||||||
#import "AFHTTPRequestOperation.h"
|
#import "AFHTTPRequestOperation.h"
|
||||||
#import <libkern/OSAtomic.h>
|
|
||||||
|
|
||||||
#if __IPHONE_OS_VERSION_MIN_REQUIRED
|
#if __IPHONE_OS_VERSION_MIN_REQUIRED
|
||||||
static NSTimeInterval const kAFNetworkActivityIndicatorInvisibilityDelay = 0.25;
|
static NSTimeInterval const kAFNetworkActivityIndicatorInvisibilityDelay = 0.25;
|
||||||
|
|
||||||
@interface AFNetworkActivityIndicatorManager ()
|
@interface AFNetworkActivityIndicatorManager ()
|
||||||
@property (readwrite, nonatomic, assign) NSInteger activityCount;
|
@property (readwrite, atomic, assign) NSInteger activityCount;
|
||||||
@property (readwrite, nonatomic, retain) NSTimer *activityIndicatorVisibilityTimer;
|
@property (readwrite, nonatomic, retain) NSTimer *activityIndicatorVisibilityTimer;
|
||||||
@property (readonly, getter = isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible;
|
@property (readonly, getter = isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible;
|
||||||
|
|
||||||
|
|
@ -97,25 +96,31 @@ static NSTimeInterval const kAFNetworkActivityIndicatorInvisibilityDelay = 0.25;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Not exposed, but used if activityCount is set via KVC.
|
// Not exposed, but used if activityCount is set via KVC.
|
||||||
|
- (NSInteger)activityCount {
|
||||||
|
return _activityCount;
|
||||||
|
}
|
||||||
|
|
||||||
- (void)setActivityCount:(NSInteger)activityCount {
|
- (void)setActivityCount:(NSInteger)activityCount {
|
||||||
__sync_swap(&_activityCount, activityCount);
|
@synchronized(self) {
|
||||||
|
_activityCount = activityCount;
|
||||||
|
}
|
||||||
[self updateNetworkActivityIndicatorVisibilityDelayed];
|
[self updateNetworkActivityIndicatorVisibilityDelayed];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)incrementActivityCount {
|
- (void)incrementActivityCount {
|
||||||
[self willChangeValueForKey:@"activityCount"];
|
[self willChangeValueForKey:@"activityCount"];
|
||||||
OSAtomicIncrement32((int32_t*)&_activityCount);
|
@synchronized(self) {
|
||||||
|
_activityCount++;
|
||||||
|
}
|
||||||
[self didChangeValueForKey:@"activityCount"];
|
[self didChangeValueForKey:@"activityCount"];
|
||||||
[self updateNetworkActivityIndicatorVisibilityDelayed];
|
[self updateNetworkActivityIndicatorVisibilityDelayed];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)decrementActivityCount {
|
- (void)decrementActivityCount {
|
||||||
[self willChangeValueForKey:@"activityCount"];
|
[self willChangeValueForKey:@"activityCount"];
|
||||||
bool success;
|
@synchronized(self) {
|
||||||
do {
|
_activityCount--;
|
||||||
int32_t currentCount = _activityCount;
|
}
|
||||||
success = OSAtomicCompareAndSwap32(currentCount, MIN(currentCount - 1, currentCount), &_activityCount);
|
|
||||||
} while(!success);
|
|
||||||
[self didChangeValueForKey:@"activityCount"];
|
[self didChangeValueForKey:@"activityCount"];
|
||||||
[self updateNetworkActivityIndicatorVisibilityDelayed];
|
[self updateNetworkActivityIndicatorVisibilityDelayed];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue