先复习几个概念
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
看来两者的实现是一模一样的,只是为了字面意思上的区分.