您的位置:首页 > 移动开发 > IOS开发

iOS 【const的使用】

2016-04-20 23:54 344 查看
说真的,const是c语言的内容,但一直在iOS没有很好的结合,借此机会说明一下const的用法。

在程序中我们会经常的遇到一些常量是经常使用的,我们通常将他们定义成 枚举类型 或是 宏定义类型 再或是const常量,今天介绍的是const常量。用const定义过的常量我们可以在多个文件中使用,相比于宏定义而言有不少优势。

宏定义属于预编译指令,在程序运行之前已经编译好了的,比如说

#define wzy @"wzy"

如果在程序中有用到wzy的,那么会在程序运行之前将所有的wzy替换成@"wzy",每次替换相当于开辟了一块临时的内存空间。显然这样是浪费的。

再看const常量。我们如下定义:

NSString *const wzy = @"wzy";

此时wzy这个变量由于被const修饰,那么wzy是不能被改变的,也就是其内容无法被修改,那么在程序进行的时候,wzy首先被初始化,只开辟一块空间,节约了内存资源。

一般在项目中是如下定义和使用const常量的:

.h文件

#import <Foundation/Foundation.h>

UIKIT_EXTERN NSString *const WZYAppKey;
UIKIT_EXTERN NSString *const WZYAppSecret;
UIKIT_EXTERN NSString *const WZYRedirectUri;


.m文件

#import <Foundation/Foundation.h>

NSString *const WZYAppKey = @"712312313153";
NSString *const WZYAppSecret = @"afdfdsff17d6sfsf9c";
NSString *const WZYRedirectUri = @"http://";


对于const在C中的使用,需要注意这么几个地方:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
@autoreleasepool {
int a = 10;
int b = 20;

//        int *const p = &a; // ① 如果const修饰的是p,那么p的值是不能改变的,也就是p中存放的a的地址无法改变(p是int类型的指针变量)。但是*p是可以变化的,我们并没有用const去修饰*p,所以可以通过*p去改变a的值
int const  *p = &a; // ② 如果const修饰的是*p,那么*p的值是不能改变也,也就是p中存放的a的地址中的值无法改变,但是p的值是可以改变的(也就是p此时可以改变指向)

NSLog(@"a = %d,b = %d,*p = %d", a, b, *p);

//        *p = 20; // 对应 ①
p = &b; // 对应 ②

NSLog(@"a = %d,b = %d,*p = %d", a, b, *p);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言 iOS const