您的位置:首页 > 移动开发 > IOS开发

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,即变量包含那种可能)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS 枚举 按位操作