スレッドセーフな方法でネットワーク アクティビティ インジケーターを制御しようとしています。
これが私が現在行っている方法ですが、もっと良い方法があるはずだと思います。ロックの使用を探していましたが、高価な操作のようです。私は 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 を使用して、このようなことを行うにはどうすればよいでしょうか?