iOS代码规范篇----宏

     现在正式谈谈代码规范了,代码规范是一个很大的课题,由于我本人能力的局限,不能很详细生动专业的在宏观上去讲代码怎么写才是规范的,所以就化整为零的去写写代码哪些地方应该注意的问题吧。

    首先就从宏开始,一般我们写一个项目都会用到宏去定义一个字符串、int常量等,例如#define ANIMATION_DURATION 0.3  这个预处理指令会把代码中的ANIMATION_DURATION替换成0.3,一般这样写确实也达到了我们预计的目的,不过这样写有几个问题:1.这个常量没有类型信息,光从代码字面上只可以看出和动画时间有关。 2.预处理过程中会把碰到的所有 ANIMATION_DURATION 一律替换成0.3,这样的话假如这个宏定义在了一个类的.h文件中,那么在其他导入了这个.h文件的类文件中,所有的 ANIMATION_DURATION都会被替换;3.使用宏定义的常量可能会无意中遭人修改,从而导致应用程序中各个部分所使用的值互不相同。在Xcode6之前,当我们创建一个工程文件时,都会默认创建一个pch文件,但之后就不会默认创建了,以及后来苹果提到在写项目时建议少用宏可以看出宏会影响项目的性能。那么怎么写才更好呢?可以使用下面这个方法:

static const NSTimeInterval kAnimationDuratin = 0.3;

用这种方式定义的常量既包含了类型信息,也不会额外耗费预处理的资源。这里需要注意一下命名规范:若常量局限与某“编译单元”(即实现文件.m)之内,则在前面加字母k;若常量在类之外可见,通常以类名为前缀。另外定义常量的位置也很重要,一般在头文件中定义宏常量或者static const 定义的常量非常不可取,因为当在别的文件中导入这个头文件时,有可能会引起命名冲突,所以这儿又回到了前面提到的常量在类之外时命名应以类名为前缀的问题了。变量一定要同时使用static const 修饰符来声明,如果试图修改const修饰符所声明的变量,那么编译器就会报错,而static则表明此变量仅在定义此变量的编译单元中可见。有时候需要对外公开某个常量,例如通知名称,常见的系统键盘事件通知名称,并不是一个具体的字符串,因为注册者无须知道实际字符串值,所以只需以常量变值来注册自己想要接收的通知即可。这个常量在头文件中“声明”,且在实现文件中“定义”。例如这样:

.h   |  extern NSString *const ConstString;

.m  |  NSString *const ConstString = @"a string";

这里extern表示声明一个全局变量,也可修饰函数。

好了,上面分析了代码中宏的不足之处,并给出了有效的定义常量的方法去替代宏常量。看完这篇文章,你是否对宏有一个新的理解呢?如果此文章对你有所启发,请给个赞哈❤️

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

推荐阅读更多精彩内容

  • 之前看了很多面试题,感觉要不是不够就是过于冗余,于是我将网上的一些面试题进行了删减和重排,现在分享给大家。(题...
    Job_Yang阅读 12,111评论 12 143
  • 转:http://www.cocoachina.com/programmer/20151019/13746.htm...
    Style_伟阅读 1,343评论 0 3
  • 今天看完《微习惯》的概要,整个人都轻松了许多,这是我目前为止看到过的最简单也不易失败的习惯养成法。 微习惯就是每天...
    莉萍LP阅读 197评论 4 0
  • F&M创新节,是虎嗅打造的、突出科技元素的创新创业嘉年华。2016虎嗅F&M创新节(北京站)汇聚了前沿技术的探索者...
    活动家阅读 363评论 0 0
  • 卫生安全,教育教学理念,摆事实
    一手王阅读 88评论 0 0