在看SDWebImage图片加载库的时候,看到了一个位运算的高级使用,之前对位运算深入了解只是在datalab中,但也只是处于“学会”的阶段,本篇介绍位运算在实践中管理状态的使用,希望能打开你的思路,对你有所帮助
SDWebImage运用option与状态进行位运算处理,这里我们仍使用option
初始化状态标志
typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) {SDWebImageRetryFailed = 1 << 0,SDWebImageLowPriority = 1 << 1,SDWebImageCacheMemoryOnly = 1 << 2,SDWebImageProgressiveDownload = 1 << 3,SDWebImageRefreshCached = 1 << 4,SDWebImageContinueInBackground = 1 << 5,//后面还有很多,这里省略
};
设置状态标志
这里先将option置为0
使用或运算设置option的值
option = 0;option = option | SDWebImageRetryFailedoption = option | SDWebImageLowPriority
此时option处于SDWebImageRetryFailed和SDWebImageLowPriority状态
也就是option的值为 00 0011
检查状态
判断option是否处于xx状态时,用与运算
if (options & SDWebImageLowPriority) {//执行一些操作
}
if (options & SDWebImageContinueInBackground) {//执行一些操作
}
由于option的值为 00 0011,所以只会走第一个if,不会走第二个if
清除状态
option = option & ~SDWebImageRetryFailed
此时option的值为 00 0010,清除了SDWebImageRetryFailed状态
总结
用法比较简单,但这个方法我觉得很厉害,思想真的值得学习