Effective Objective-C 2.0 读书笔记2

不要用预处理指令定义常量。这样定义出来的常量不含类型信息。编译器只会在编译前,据此进行查找和替换操作。即使有人重新定义了常量的值,编译器也不会产生禁告信息。这会导致程序中常量值不一致。

解决方法如下:

static const NSTimeInterval kAnimationDuration = 0.3;

用此方式定义的常量包含类型信息,好处清楚的描述了常量的含义。

注意常量的名称:常用的命名方法:若常量局限于某个编译单元(也就是实现文件中),则在前面加字母k,若常量在类外可见。则通常以类名为前缀。

注意常量的位置:若不打算公开这个常量,则应将其定义在使用该常量的实现的文件里。变量一定要同时用static与 const来声明。

用static 修饰则意味着该变量仅在定义此变量的编译单元可见。在Objectivec-C的语境下,“编译单元”一词通常指每个类的实现文件(.m 文件)

有时候需要对外公开某个变量,此类常量须放在”全局符号表“中。以便可以在定义该常量的编译单元之外使用。

定义方式如下:

//In the header file

extern  NSString *const EOCStringConstant;

//In the Implementation file 

NSString *const EOCStringConstant = @"VALUE";

此常量必须要定义,并且只能定义一次。通常将其定义在与声明变量的头文件相关的实现文件里。

在实现文件中使用static const 来定义“只在编译单元内可见的常量”,由于此类常量不在全局符号单元表中,无需为其名称加前缀。

在头文件中,使用extern来声明全局常量,并在相关得实现文件中定义其值。这种常量要出现在全局符号表中,所以其名称应加以区隔,通常用与之相关的类名做前缀。

(这块内容其实就是讲得变量的作用域的问题,以及static和extern关键字的用法。和c++的中用法完全一致)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容