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文件
.m文件
对于const在C中的使用,需要注意这么几个地方:
在程序中我们会经常的遇到一些常量是经常使用的,我们通常将他们定义成 枚举类型 或是 宏定义类型 再或是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; }
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 如何组织构建多文件 C 语言程序(二)
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 如何写好 C main 函数
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C语言自动生成enum值和名字映射代码
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法