现在的位置: 首页 > 综合 > 正文

IOS开发中常量的处理

2017年10月31日 ⁄ 综合 ⁄ 共 1176字 ⁄ 字号 评论关闭

白天做项目的时候遇到了一个字符串的问题,解决的时候看到了一篇博文http://marshal.easymorse.com/archives/4149,题目是《在objc项目中使用常量的最佳实践》,讲的是如何在项目中处理常量,现在拿过来,大家一起学习下。
   
    IOS开发中,文本解析,键值处理等都会用到常量,跟博主一样,项目中大部分的处理都是用的C的预处理#define来处理常量
,比如:

  1. #define ELEMENT        “element”
  2. #define NODE             "node"

复制代码

等到用的时候,直接加入这个头文件就可以了。
   
    但是有问题,因为这样定义出来的常量值是c字符串,不能直接使用OBJC中NSString类中提供的方法,很是不方便,所以博主写了可以这样做:

  1. #import
  2. extern NSString * const kInitURL;
  3. @interface Constants : NSObject {
  4. }
  5. @end

复制代码

这里使用到extern c关键字,表示这个变量已经声明,只是引用。const关键字表示变量是常量,不可修改。
    然后在.m文件中可以这样写

  1. #import "Constants.h"
  2. NSString * const kInitURL = @"http://marshal.easymorse.com";
  3. @implementation Constants
  4. @end

复制代码

这里博主用了驼峰命名法,但是我感觉既然是用作常量的,最好还是按照规范全部都大写,以示区别,比如K_INIT_URL,当然写成什么无所谓,关键看团队的编程习惯和约定。

    这样写完后,就可以在引入头文件之后直接用了,而且还可以使用NSString类提供的诸多方法。比如

  1. [myURL isEqualToString:kInitURL];

复制代码

试了一下博主的方法,确实比原来使用宏定义要方便的多,扩展开来,其实单纯从字符串来说,宏定义也不是不可以实现,我们可以直接将字符串定义成OBJC类型的,比如:

  1. #define ELEMENT         @“element”
  2. #define NODE              @“node”

复制代码

这样同样可以实现直接使用NSString类提供的方法,大家可以试试看,是不是很方便。
   
    但宏定义有局限性,没办法表示诸多的数据类型,另外编程规范中也不推荐大量的使用宏定义,所以博主的方法看来确实是最佳实践之一,其实除此以外也有很多方法可以用,比如不使用const关键字,也可以使用static关键字定义静态变量。都可以,无论哪种方法都可以实现功能,方法优劣只能在易用性,可读性和执行效率上体现出来,当然如果你还停留在硬编码的状态,那说明你还不能估计出硬编码带来的后果,所以你一定要看看这些帖子。
    不对或者有其他想法请提出,大家共同学习进步。

抱歉!评论已关闭.