OC-const、static、#define使用

一、const

    const修饰符可以修饰指针类型、基本数据类型、设置常量  ,编译检查,比宏更加安全  

    1.const修饰指针类型

        (1)const在 * 的右边: 

            int *const p = &d; 

            p = 10;

            *p = &b;//错误

            指针指向的地址无法改变,但是可以通过指针改变指向地址里保存的值。

        (2)const在 *  的左边

            int const *p = &d;

            p = 10;//错误

            *p = &b;

            指针指向的地址可以改变,但是无法通过指针改变指向地址里保存的值。

      2.const修饰基本数据类型

            (1)使用const可以把基本数据类型变为常量,无法进行修改

                int const a = 1;

                const int b = 2;

                a = 2;//错误

                b = 3;//错误

        3.const设置常量

                (1)静态常量

                    static NSString * const str = @"str";   

                    str = @"strstr"//报错,值不可改变

                    static const NSString *str = @"str";

                    str = @"strstr";//值可以改变,地址不能改变

                (2)全局常量

                     .h文件中   extern NSString * const string;

                    .m文件中   NSString * const string = @"string";



二、static

   1.作用

    (1)函数体内 static 变量的作用范围为该函数体,其内存只被分配一次并存储到全局变量区,因此其值在下次调用时不会改变; 

    (2)在类内声明的 static 全局变量可以被该类所用函数访问,但不能被外部函数访问; 

    (3)在类中的 static 成员变量属于整个类所拥有;

    (4)在类中的 static 成员函数属于整个类所拥有,只能访问类的static 成员变量。  

   2.修饰局部变量:

    1.修饰局部变量,使局部变量的生命周期延长到程序结束才会销毁。

    2.被修饰的局部变量只会生成一份内存,只会初始化一次。

    3.修饰全局变量

    1.修饰全局变量只能在本文件中访问,避免重复定义全局变量

    4.注意

      静态方法只能调用静态方法和静态变量



三、#define宏定义

    #define作用在预编译时期,其作用就是代码替换,不做任何类型检查。

    #define 宏名 主体;

    #define  PI  3.1415926

你可能感兴趣的:(OC-const、static、#define使用)