iOS定义常量的最佳实践

      我之前写过一篇博客《iOS项目中全局变量的定义与使用》,讲的是怎么在iOS项目中定义全局变量。而全局变量和常量是项目中最常用到的两种类型的变量。对于有代码洁癖的程序猿来说,一般是不允许在编码中直接出现数字、字符串的。这篇博客我们来谈谈在iOS中声明常量。并从最一般的声明方法,最后推到最佳实践。

【实践1】:直接在类中声明const常量

- (void)viewDidLoad {
  [super viewDidLoad];
  
  
  NSString* const initString = @"myName";
  NSLog(@"%@",initString);
  
}

如果我想再次对这个常量进行赋值,会出现如下错误提示:只读变量不能被赋值,这表示我们声明的的确是一个常量。

问题:在viewDidLoad()方法中声明了一个常量,那就只能在这个方法中使用这个常量了。。。是不是很悲剧。


【实践2】:在某个类中声明一个全局的const常量

#import "ViewController.h"

NSString* const initString = @"myName";

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  
  NSLog(@"%@",initString);
  
}


@end

在一个类的实现文件中定义一个const常量,那么这个常量就可以在这个类中都可以用。不再局限于一个方法了。


【实践3】类中使用#define定义常量

#import "ViewController.h"

# define ALL_NAME @"chenyufeng"
# define ALL_AGE 23


@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  

  NSLog(@"%@",ALL_NAME);
  NSLog(@"%d",ALL_AGE);
  
}


@end

在使用#define宏定义的时候,在程序中会进行完全的文本替换。个人并不是特别常用#define。


【最佳实践】新建类存放所有的常量

(1)新建Constant类,在Constant.h中实现如下:

#import <Foundation/Foundation.h>

extern NSString* const url;

#define URL @"http://www.baidu.com"

@interface Constant : NSObject

@end

(2)在Constant.m中实现如下:

#import "Constant.h"


NSString* const url = @"http://www.google.com";

@implementation Constant

@end

(3)主文件中实现如下:

#import "ViewController.h"
#import "Constant.h"



@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  

  NSLog(@"%@",url);
  
  NSLog(@"%@",URL);

  
}


@end

(4)输出结果如下:

iOS定义常量的最佳实践_第1张图片


这个我觉得是声明一个常量的最佳实现,也可以符合实际项目的需要。注意的是:在需要使用到定义的常量时,需要导入常量类的头文件。


github主页:https://github.com/chenyufeng1991  。欢迎大家访问!


你可能感兴趣的:(ios,Objective-C)