运用位运算管理状态标志—以SDWebImage为例

发布时间:2024年01月17日

在看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状态

总结

用法比较简单,但这个方法我觉得很厉害,思想真的值得学习

文章来源:https://blog.csdn.net/weixin_52259822/article/details/135652403
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。