在看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 | SDWebImageRetryFailed
option = 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状态
用法比较简单,但这个方法我觉得很厉害,思想真的值得学习