iOS 中const的使用

来源:互联网 发布:域名转发 编辑:程序博客网 时间:2024/04/30 06:35

说真的,const是c语言的内容,但一直在iOS没有很好的结合,借此机会说明一下const的用法。

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

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

#define wzy @"wzy"
  • 1

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

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

NSString *const wzy = @"wzy";
  • 1

此时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文件
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
#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;}
1.修饰变量
  如const int a =3;
  常量a的值不能再修改
  2.修饰指针
  如 const char*p =123;
  p[0]='4'; 是错的, 字符串内容不允许改
  char *const p = "123";
  p ="456"; 是错误的, 指针不允许再指向其他地址
  3.常引用
  多用于参数, 防止参数被修改,引用是避免创建参数副本
  void test( const struct A &a){}
  4.常函数
  就是类的成员函数,参数后面加个const, 此函数中不允许修改类的数据成员
  void test() const

0 0
原创粉丝点击