您的位置:首页 > 移动开发 > Objective-C

Effective Objective-C 2.0 第4条:多用类型常量,少用#define预处理指令

2015-09-04 18:17 507 查看

Define预定义类型

define ANIMATION_DURATION 0.3

特点:预处理指令会把源代码中的ANIMATION_DURATION字符替换成0.3

缺点:这样定义的常量没有类型信息

Static Const常量

static const NSTimeInterval kAnimationDuration = 0.3;

特点:用此方式定义的常量包含类型信息,其好处是清楚地描述了常量的含义。命名方法:若常量局限于某“编译单元”之内,则在前面加字母k;若常量在类之外可见,则通常以类名为前缀。

若不打算公开某个常量,则应将其定义在使用该常量的m文件里。

常量一定要同时用static与const来声明。如果试图修改由const修饰符所声明的变量,那么编译器就会报错,而static修饰符则意味着该变量仅在此变量的编译单元中可见。在OC中,编译单元通常指该类的实现文件。如果声明常量时不加static,则编译器会为它创建一个“外部符号”,此时如果若是另一个编译单元中也声明了同名变量,编译器报错。

声明一个外界可见的常值变量:

//In the header file

extern NSString* const EOCStringConstant;

//In the implementation file

NSString* const EOCStringConstant = @”VALUE”;

此常量需放在“全局符号表”中,以便可以在定义该常量的编译单元之外使用。

特点:该常量在头文件中“声明”,且在实现文件中“定义”。而且Extern告诉编译器在全局符号表中将会有一个名叫EOCStringConstant的符号。此类常量必须定义,而且只能定义一次。由实现文件生成目标文件时,编译器会在“数据段”为字符串分配空间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: