- (void)decrementActivityCount {
[self willChangeValueForKey:@"activityCount"];
bool success;
do {
int32_t currentCount = (int32_t)_activityCount;
success = OSAtomicCompareAndSwap32(currentCount, MIN(currentCount - 1, currentCount), &_activityCount);
//Incompatible pointer types passing 'NSInteger *' (aka 'long *') to parameter of type 'volatile int32_t *' (aka 'volatile int *')
} while(!success);
[self didChangeValueForKey:@"activityCount"];
[self updateNetworkActivityIndicatorVisibilityDelayed];
}
_activityCount是一个NSInteger
以上是我的代码和两个问题。
答案 0 :(得分:1)
OSAtmonicCompareAndSwap32实际上在做什么?
它原子地比较 currentCount 和_ activityCount ,如果它们相等,则将_ activityCount 设置为MIN(currentCount - 1, currentCount)
。< / p>
如果比较相等,则返回true。
因此,基本上它执行的原子减量为1.使用较少的代码可以实现相同的目的。
如何删除警告?
_ activityCount 必须是int32_t
,或者
使用64位整数和CompareAndSwap的64位变体:
OSAtomicCompareAndSwap64