#define ANIMATION_DURATION 0.3
static const NSTimeInterval kAnimationDuration=0.3;
比较上面两个有何区别呢?
1.#define是预处理。
C语言中有四步:预处理,编译,汇编,链接。
只要导入过 .h 只要是遇到了这个 ANIMATION_DURATION都会用0.3去替换掉。
ANIMATION_DURATION 是个什么类型的东西,不知道。
此时,编译器还没有上场。
2.static const NSTimeInterval kAnimationDuration=0.3;
优点:(1)知道类型。 type
(2) 有太多常量去定义时,方便别人阅读。
a.为什么用kAnimationDuration,前面加个k呢?
这是因为,这个kAnimationDuration 是只给特定的.m文件去使用的;这个.m(实现文件)是一个translation unit(翻译单元)。
b.为什么kAnimationDuration不放在 .h文件中呢?
。。。。。
在.m中定义,不会暴露给别人。
c.修饰符:
const : 这是一个常量,不容改变;
static: 表明这个变量 is local to the translation unit in which it is defined.
const 好理解,来看一下static?
首先来看一下 static 的英文解释:
static ['stætik]
- adj.
- [亦作 statical]
- 静止的;停滞的
- 稳定的,不变的;很少变化的
- 不活泼的;缺乏活力的
- 静态的;静力的
- 固定的;在固定位置(或地面)进行的
- 恬静的,安静舒适的
- (水)贮于无压水箱中的
此时我们选择第6个解释,固定的,在固定位置的。
报错了哟!如果没有写static, compiler多手多脚,加了一个extern.
实际过程中,如果加入了static 修饰, 编译器就像在预处理过程中一样,将出现kAnimationDuration的地方,替换成0.3; 编译器根本不会创建一个符号。
3.那如果想暴露一个常量呢?
如上所示。
Student.m中如果 #import "EOCLoginManager.h"时,都可以看见那个变量。
全局所见。
global symbol table.