- (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
以上是我的代码和两个问题。
最佳答案
OSAtmonicCompareAndSwap32实际在做什么?
它自动比较currentCount和_activityCount,如果它们相等,则将_activityCount设置为MIN(currentCount - 1, currentCount)
。
如果比较相等,则返回true。
因此,基本上它执行原子减1。用更少的代码即可完成相同的工作。
如何删除警告?
_activityCount必须为int32_t
,或者
使用64位整数和CompareAndSwap的64位变体:OSAtomicCompareAndSwap64
关于ios - OSAtmonicCompareAndSwap32给我一个警告,我不知道,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20288695/