摒弃:
#define ANIMATION_DURATION 0.3
 
#define ERROR_MESSAGE @“ErrorMessage”
1)没有常量的类型信息
2)假设此指令声明在某个头文件中,那么所有引入了这个头文件的代码,都可以访问和修改ANIMATION_DURATION。
 
推荐:
1、私有常量
.m文件
static const NSTimeInterval kAnimationDuration = 0.3;
 
static NSString *const kErrorMessage = @“ErrorMessage”;
 
2、公开常量
.h文件
extern const NSTimeInterval PersonModelAnimationDuration;
 
extern NSString *const PersonModelErrorMessage;
 
.m文件
const NSTimeInterval PersonModelAnimationDuration = 0.3;
 
NSString *const PersonModelErrorMessage = @“ErrorMessage”;
 
几点说明:
1、常量名称的常用命名方法:若常量局限于某“编译单元”,也就是“实现文件”之内,则在前面加字母k;若常量在类之外可见,则通常以类名为前缀。
 
2、在头文件里声明预处理指令来定义常量,这样做真的非常糟糕,当常量名称有可能互相冲突时更是如此。
 
3、私有变量一定要同时使用static与const来声明。如果试图修改由const修饰符所声明的变量,那么编译器就会报错。而static修饰符则意味着该变量仅在定义此变量的编译单元中可见。编译器每收到一个编译单元,就会输出一份“目标文件(object file)”在Objective-C的语境下,“编译单元”一词通常指每个类的实现文件(以.m为后缀名)。因此,在上述范例代码中声明的kAnimationDuration变量,其作用域仅限于由PersonModel.m锁生成的目标文件中。假如声明此变量时不加static,则编译器会为它创建一个“外部符号”。此时,若是另一个编译单元中也声明了同名变量,那么编译器就会抛出一条错误消息。
 
4、事实上,如果一个变量既声明为static,又声明为const,那么编译器根本不会创建符号,而是会像#define预处理指令一样,吧所有遇到的变量都替换为常量。不过,区别是,用这种方法定义的常量是带有类型信息的。
 
5、全局常量需要放在“全局符号表”中,以便可以在定义该常量的编译单元之外还用。因此全局常量是会创建符号的。
 
6、extern这个关键字是要告诉编译器,在全局符号表中将会有一个名为***的符号。也就是说,编译器无须查看其定义,即允许代码使用此常量。因为它知道,当链接成二进制文件之后,肯定能够找到这个常量。因此,此类常量必须定义,而且只能定义一次。通常将其定义在与声明该常量的头文件相关的实现文件里。
 

最新文章

  1. [python] xlrd
  2. 刷新DNS命令 如何刷新DNS缓存(flushdns)
  3. 修改windows系統下xampp中apache端口被其他程式占用的問題
  4. 说说你所熟知的MSSQL中的substring函数
  5. jQuery的动画效果
  6. arc4random和arc4random_uniform
  7. js生成验证码并且判断
  8. (C语言)共用体union的使用方法举例
  9. HDU--杭电--3415--Max Sum of Max-K-sub-sequence--队列--双向队列
  10. MMS model
  11. C语言strstr()函数:返回字符串中首次出现子串的地址
  12. 三菱Q系列PLC的io分配
  13. Python爬虫入门这一篇就够了
  14. lua --- 表操作
  15. tomcat 绑定域名 防止恶意域名绑定
  16. [转帖] BIO与NIO、AIO的区别
  17. 直面Java 第002期
  18. function类型(c++11)
  19. go语言之进阶篇字符串操作常用函数介绍
  20. android中LitePal的使用

热门文章

  1. 【Python下进程同步之互斥锁、信号量、事件机制】
  2. Fluent_Python_Part4面向对象,10-seq-hacking,序列的修改、散列和切片
  3. <img>标签显示本地路径的图片的.NET解决方案
  4. vue 中 限制 input 输入数字、小数位数等
  5. 《创业者技能树》--创业课--14天复盘第一课candy2--HHR计划
  6. PyQt5数据可视化
  7. IDEA 下的 github 创建提交与修改
  8. web.xml中的welcome-file-list标签作用
  9. GO第归
  10. C语言-断言