我试图以线程安全的方式控制网络活动指示器。
这是我目前正在做的方式,但我认为必须有更好的方法来做到这一点。我一直在寻找使用锁,但这似乎是一项昂贵的操作。我一直在研究 OSAtomicAdd,但不知道在这种情况下如何使用它。
+ (void)start
{
[self counterChange:1];
}
+ (void)stop
{
[self counterChange:-1];
}
+ (void)counterChange:(NSUInteger)change
{
static NSUInteger counter = 0;
static dispatch_queue_t queue;
if (!queue) {
queue = dispatch_queue_create("NetworkActivityIndicator Queue", NULL);
}
dispatch_sync(queue, ^{
if (counter + change <= 0) {
counter = 0;
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
} else {
counter += change;
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
}
});
}
如何使用 OSAtomicAdd 完成这样的事情?