NS_ENUM&NS_OPTION

先复习几个概念

typedef定义类型别名

语法:typedef类型别名

例子:typedef double REAL

REAL可以直接用于定义double类型

enum 枚举

语法: 

enum WEEKDAY{   \\该语句定义了一个枚举类型

    MONDAY = 1,

    TUSEDAY,

    WEDNESDAY,

    THURSDAY,

    FRIDAY,

    SATURDAY,

    SUNDAY

};

使用:

enum WEEKDAY day;   \\该语句声明了一个枚举类型的变量

使用枚举名称的时候一般前面要加enum关键字,所以一般都用typedef给enum定义一个类型别名

typedef enum {

    UITableViewCellStyleDefault,

    UITableViewCellStyleValue1,

    UITableViewCellStyleValue2,

    UITableViewCellStyleSubtitle

} UITableViewCellStyle;

C语言和OC里面 enum如果没有设定默认值的话,那么第一个值默认为0,下面的值默人递增.

swift里面不设置默认值的话,不会有默认值

stuct 结构体

语法:

stuck  softArray

{

    Int len;

    Int array[];

}

使用 softArray.len

苹果为了使用方便宏定义了NS_ENUM和NS_OPTION

用法:

NS_ENUM用于一般的枚举定义

NS_OPTION用于可多选的,按二进制位定义的枚举

typedefNS_ENUM(NSInteger, TestEnum){

    TestEnumA =0,

    TestEnumB,

    TestEnumC,

    TestEnumD,

};

typedefNS_OPTIONS(NSInteger, TestOption) {

    TestOptionA =1,

    TestOptionB =1<<1,

    TestOptionC =1<<2,

    TestOptionD =1<<3,

};

分别对应于CF框架里的CF_ENUM和CF_OPTION,由于是闭源的,我们无法直接窥探出它在CF框架中的具体实践,

想办法把OC代码编译成C++,大致看出了其中的具体实现

cd到.m文件夹下

clang -rewrite-obj test.m


NS_ENUM&NS_OPTION_第1张图片

看来两者的实现是一模一样的,只是为了字面意思上的区分.

你可能感兴趣的:(NS_ENUM&NS_OPTION)