经验之谈—PCH 中使用:const 与宏

  • 很多时候,由于开发的需要,我们常常需要在pch中定义一些在整个项目中都用得到的变量等
  • 一般来说,在以前的开发过程中,我们都习惯于直接在pch中写一个宏就搞定了。但是我们仔细的分析苹果官方文档,会发现,他里面定义的一些变量,不是用宏定义的,而是用const
  • 那我们就要知道为什么用const了,首先了解一下const的一些基本的使用,在C语言的语法中,若我们若const休息一些变量会出现什么情况,简单了解一下,这也是面试常问的内容:

    那么就简单的回顾一下吧:



修饰常量:

void testConst()
{
    const int age1 = 20;
    int const age2 = 30;
}

当是这种情况的时候:效果是一样的,这个时候 age1\age2是常量, 只读



当修饰指针的时候,分情况

就近原则 靠近谁 谁就相当于常量 不可重新赋值或者重新指向

void testConst2()
{
    int age = 20;

    // const的修饰的*p1和*p2,*p1和*p2是常量,不能通过p1、p2指针间接修改其他变量的值
    const int *p1 = &age;
    int const *p2 = &age;

    int num = 30;
    p1 = #
    p2 = #

    // const修饰的p3,p3是个常量,p3不能再指向其他变量
    int * const p3 = &age;

    // 写法错误
    //        int num = 30;
    //        p3 = #

    // 写法正确
    //        *p3 = 30;
}

const的修饰的*p1和*p2,*p1和*p2是常量,不能通过p1、p2指针间接修改其他变量的值



那么我们在项目中,应该怎么使用呢?

我们定义一个类 :比如这个类中是我们项目中的一些数据

ZYConst.h文件中:

#import <Foundation/Foundation.h>

// 通知
// 表情选中的通知
extern NSString * const ZYEmotionDidSelectNotification;
extern NSString * const ZYSelectEmotionKey;

// 删除文字的通知
extern NSString * const ZYEmotionDidDeleteNotification;

ZYConst.m中:

#import <Foundation/Foundation.h>

// 通知
// 表情选中的通知
NSString * const ZYEmotionDidSelectNotification = @"ZYEmotionDidSelectNotification";
NSString * const ZYSelectEmotionKey = @"ZYSelectEmotionKey";

// 删除文字的通知
NSString * const ZYEmotionDidDeleteNotification = @"ZYEmotionDidDeleteNotification";

那我们在pch中,直接导入这个ZYConst文件就可以了

#import "ZYConst.h"

那么整个项目中,就有了我们在这个类中定义的一些变量



好处:

  • 使用const修饰的,在内存中就只有一份,那么无论你在项目中的哪里使用,都是这一份,所以强烈推荐使用
  • 使用宏的话:宏是在编译的时候 将我们定义的宏的内容,直接编译成我们写的字符串,那么可能存在多次创建,多次调用的。

    注意

    有些时候,const还是不能替代宏的,比如:

// RGB颜色
#define ZYColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0]

// 随机色
#define ZYRandomColor HWColor(arc4random_uniform(256), arc4random_uniform(256), arc4random_uniform(256))

这个时候,就不能使用const,因为const后面接的内容不能是通过一些计算出来的结果,而是一些死的东西。

时间: 2024-10-13 20:01:58

经验之谈—PCH 中使用:const 与宏的相关文章

C++总结:C++中的const和constexpr

C++中的const可用于修饰变量.函数,且在不同的地方有着不同的含义,现总结如下. const的语义 C++中的const的目的是通过编译器来保证对象的常量性,强制编译器将所有可能违背const对象的常量性的操作都视为error. 对象的常量性可以分为两种:物理常量性(即每个bit都不可改变)和逻辑常量性(即对象的表现保持不变).C++中采用的是物理常量性,例如下面的例子: 1 2 3 4 5 6 7 struct A {     int *ptr; }; int k = 5, r = 6;

详解C和C++中的const关键字

在讲下面的内容之前,要先看看这篇文章const.static变量的存储位置 一.C中的const 作用:(1)可以定义const常量,具有不可变性. (2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患. (3)可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改. 同宏定义一样,可以做到不变则已,一变都变! (4)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性. 还是上面的例子,如果在函数体内修改了i,编译器就会报错: (5) 可以节省空间,避免不必要的内存

C/C++中的const真正的用法

const基础知识(用法.含义.好处) intmain() { constint a; intconst b; constint *c; int* const d; constint * const e ; return0; } Intfunc1(const ) 初级理解:const是定义常量==>const意味着只读 含义: //第一个第二个意思一样代表一个常整形数 //第三个c是一个指向常整形数的指针(所指向的内存数据不能被修改,但是本身可以修改) //第四个d常指针(指针变量不能被修改,但

const和宏定义的区别!!!

宏的命名规范:一般以项目前缀开头,key结尾. #开头表编译. 宏的用法:1.定义常用字符串. 2.定义一段代码. const与宏的区别:1.编译时刻:宏-预编译    const-command+b(编译阶段)编译. 2.宏不会检查代码错误,只是替换,但是const会编译报错. 3.宏的好处:定义代码或字符串.方法.参数 const不能.  坏处:使用大量宏,容易造成编译时间久,每次都需要重新替换. const作用:限制类型 1.const仅仅用来修饰右边的变量(基本数据变量p,指针变量*p)

C++中的const完全解析

1. const修饰普通变量和指针 const修饰变量,一般有两种写法:const TYPE value;TYPE const value;这两种写法在本质上是一样的.它的含义是:const修饰的类型为TYPE的变量value是不可变的.对于一个非指针的类型TYPE,无论怎么写,都是一个含义,即value只不可变.例如:const int nValue:         //nValue是constint const nValue:    // nValue是const但是对于指针类型的TYPE

C/C++中的const与define

const int main() { const int a; int const b; const int *c; int * const d; const int * const e ; return 0; } 含义: 第一个第二个意思一样 代表一个常整形数 第三个 c是一个指向常整形数的指针(所指向的内存数据不能被修改,但是本身可以修改) 第四个 d 常指针(指针变量不能被修改,但是它所指向内存空间可以被修改) 第五个 e一个指向常整形的常指针(指针和它所指向的内存空间,均不能被修改) 结

c/c++中的const

const基础知识(用法.含义.好处) const int a; int const b; const int *c; int * const d; const int * const e ; 含义: 第一个第二个意思一样 代表一个常整形数: 第三个 c是一个指向常整形数的指针(所指向的内存数据不能被修改,但是本身可以修改): 第四个 d 常指针(指针变量不能被修改,但是它所指向内存空间可以被修改): 第五个 e一个指向常整形的常指针(指针和它所指向的内存空间,均不能被修改). const的好处

关于C++中的Const常量

一. 为什么需要常量 (1)如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦: 1. 程序的可读性(可理解性)变差.程序员自己会忘记那些数字或字符串是什么意 思,用户则更加不知它们从何处来.表示什么. 2. 在程序的很多地方输入同样的数字或字符串,难保不发生书写错误. 3. 如果要修改数字或字符串,则会在很多地方改动,既麻烦又容易出错. (2)尽量使用含义直观的常量来表示那些将在程序中多次出现的数字或字符串. 例如: #define MAX 100 /* C 语言的宏常量 */ co

C++中的const

C++ 在C的基础上对const 进行了进化处理 --当碰见const声明时在符号表中放入常量 --编译过程中若发现使用常量则直接以符号表中的值替换 --编译过程中若发现下述情况则给对应的常量分配存储空间 对const 常量使用了extern 对const 常量使用 & 操作符 注意:C++编译器虽然可能为const 常量分配空间,但不会使用其存储空间中的值. C++中的const常量类似于宏定义 -const int c: ≍ #define c 5  但是有区别因为宏是没有类型检查,而con