iOS 定义具有位移操作的枚举的意义
2016-02-01 13:47
399 查看
经常看到系统内使用位移操作的枚举定义,一直不是很清楚其用意。今天在看SDWebImage源码的时候,在纸上稍微计算了一下,才明白其中用意。
定义枚举类型的关键字有以下几种:enum, NS_OPTIONS, NS_ENUM.
其中,enum是c语言的枚举关键字,后两者都是通过宏定义的枚举关键字。NS_ENUM是通用情况,而NS_OPTIONS一般用来定义具有位移操作或特点的情况(bitmask)。- 【一般是当可能同时存在多个枚举值情况才会使用】
举例说明:
typedef NS_OPTIONS(NSUInteger, WFFType) {
WFFType1 = 1 << 0, // 左移
WFFType2 = 1 << 1,
WFFType3 = 1 << 2
}
比如WFFType type = WFFType1 | WFFType2;要判断type是否包含WFFType1的值。 使用 (type & WFFType1)>0即可。
因为此时type的值为0B11. 而WFFType1的值为0B01. 两者按位求与,为0B01>0。
同理,(type & WFFType3) 的结果为0B00=0。说明不存在。
这种定义枚举的优点在于,当某个枚举变量的值取其中某几个时(即包含多种可能,通过 | 来赋值)。
要判断是否包含其中某一种可能(该种可能对应的枚举二进制值必然有且只有一位为0),只要将变量同该枚举值按位求与结果大于0则说明包含(因为只有一位为1,其他均为0,这些为0的求与结果都为0。而既然结果大于0.就说明为1的那一个的位置,在变量中也为1,即变量包含那种可能)。
定义枚举类型的关键字有以下几种:enum, NS_OPTIONS, NS_ENUM.
其中,enum是c语言的枚举关键字,后两者都是通过宏定义的枚举关键字。NS_ENUM是通用情况,而NS_OPTIONS一般用来定义具有位移操作或特点的情况(bitmask)。- 【一般是当可能同时存在多个枚举值情况才会使用】
举例说明:
typedef NS_OPTIONS(NSUInteger, WFFType) {
WFFType1 = 1 << 0, // 左移
WFFType2 = 1 << 1,
WFFType3 = 1 << 2
}
比如WFFType type = WFFType1 | WFFType2;要判断type是否包含WFFType1的值。 使用 (type & WFFType1)>0即可。
因为此时type的值为0B11. 而WFFType1的值为0B01. 两者按位求与,为0B01>0。
同理,(type & WFFType3) 的结果为0B00=0。说明不存在。
这种定义枚举的优点在于,当某个枚举变量的值取其中某几个时(即包含多种可能,通过 | 来赋值)。
要判断是否包含其中某一种可能(该种可能对应的枚举二进制值必然有且只有一位为0),只要将变量同该枚举值按位求与结果大于0则说明包含(因为只有一位为1,其他均为0,这些为0的求与结果都为0。而既然结果大于0.就说明为1的那一个的位置,在变量中也为1,即变量包含那种可能)。
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- C#编程中枚举类型的使用教程
- 枚举的用法详细总结
- PHP中Enum(枚举)用法实例详解
- c#入门之枚举和结构体使用详解(控制台接收字符串以相反的方向输出)
- 理解C#中的枚举(简明易懂)
- C#枚举中的位运算权限分配浅谈
- C++基础入门教程(四):枚举和指针
- FileShare枚举的使用小结(文件读写锁)
- Java枚举类用法实例
- 枚举窗口句柄后关闭所有窗口示例
- javascript模拟枚举的简单实例
- 深入剖析JavaScript中的枚举功能
- 讲解iOS开发中基本的定位功能实现