4.多用类型常量,少用#define预处理指令
编写代码时经常要定义常量,例如,要写一个UI视图类,此视图显示出来之后就播放动画,然后消失。你可能想把播放动画的时间提取为常量。掌握了Objective-C与其C语言基础的人,也许会用这种方法来做:
#define ANIMATION——DURATION 0.3
这样定义出来的常量没有类型信息,duration这个词看上去应该与时间有关但是代码中又未明确指出。
此外,预处理过程会把碰到的所有ANIMATION——DURATION都替换成0.3,这样的话,假设此指令声明在某个头文件中,那么所有引入了这个头文件的代码,都会替换ANIMATION——DURATION。
static const NSTimeInterval kAnimationDuration = 0.3;
请注意 ,用此方式定义的,常量包含类型信息,其好处是清楚的描述了常量的含义。
-
若不打算公开某个常量,则应该将其定义在使用该常量的文件里
变量一定要同时用static和const同时修饰,如果试图修改由const修饰符所声明的常量,编译器会报错。static修饰意味着该变量仅在定义此变量的编译单元内可见。
实际上,如果一个变量声明即位const,又为static,那么编译器根本不会创建符号,而是像#define预处理指令一样,把遇到的所有变量替换为常值。 -
在头文件中使用extern来声明全局变量,并在相关文件中定义其值。这种常量要出现在全局符号表中,所以其名称应该加以区隔,通常用与之相关的类名做前缀。
编译器看到头文件中的extern关键字,就能明白如何在此头文件的代码中处理该常量了。编译器无需查看带有extern关键字的变量的定义,即允许代码使用此常量。因为它知道,当链接成二进制文件后,它肯定能找到这个常量。
关于#include与#import
区别之处
- 如果使用#include来包含头文件,不做重复引用处理情况下,那么在b.h中相当于包含了两次a.h。这样在编译时就会引起不必要的错误,这时就需要引入头文件保护符才能避免b.h中重复引用包含两次a.h。
- 如果使用#import来包含头文件,那么不需要做任何事情,在b.h中就只会包含一次a.h,而不会引起任何错误。不管你对一个文件同时包含了多少次,使用#import确定只会包含一次。所以它可以解决重复导入的问题,它会做一次判断,如果已经导入一次就不导入了。
关于#import< >与#import” “
区别在于:
原文地址:https://blog.csdn.net/zdsey/article/details/128536518
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_48308.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!