NS_OPTIONS

参考文档

在iOS开发中枚举大家用得最多的应该是NS_ENUM。
NS_ENUM也没什么好讲的。主要来讲讲位枚举NS_OPTIONS。

NS_ENUM和NS_OPTIONS本质是一样的。
NS_ENUM是通用情况,NS_OPTIONS一般用来定义具有位移操作或特点的情况。

二进制位操作

位操作 解释
&与 有0则0
l 或 有1则1

NS_OPTIONS位枚举的特点是可以使用位运算来处理枚举值,实际使用中可以用一个变量存储多个枚举值,表示互不影响的多个设置。

比如系统中的UIViewAutoresizing定义如下。

enum UIViewAutoresizing {
    UIViewAutoresizingNone                 = 0, // 000000
    UIViewAutoresizingFlexibleLeftMargin   = 1 << 0, // 000001
    UIViewAutoresizingFlexibleWidth        = 1 << 1,// 000010
    UIViewAutoresizingFlexibleRightMargin  = 1 << 2,// 000100
    UIViewAutoresizingFlexibleTopMargin    = 1 << 3,// 001000
    UIViewAutoresizingFlexibleHeight       = 1 << 4,// 010000
    UIViewAutoresizingFlexibleBottomMargin = 1 << 5,// 100000
}

一般如下写法,实现了变量保存多个枚举值

 UIViewAutoresizing resizing = 
 UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

UIViewAutoresizing resizing = 000010 |010000 = 010010

可以用 & 判断是否包含

第一种情况

if (resizing & UIViewAutoresizingFlexibleWidth) {
       // UIViewAutoresizingFlexibleWidth is set
}

等价于

if (010010 & 000010) {
       // UIViewAutoresizingFlexibleWidth is set
}

010010 & 000010 = 000010 很明显不等于0,所以为YES。

第二种情况

if (resizing & UIViewAutoresizingFlexibleTopMargin) {
       // UIViewAutoresizingFlexibleTopMargin is set
}

等价于

if (010010 & 001000) {
       // UIViewAutoresizingFlexibleTopMargin is set
}

010010 & 001000 = 0很明显等于0,所以为NO

你可能感兴趣的:(NS_OPTIONS)