美文网首页
MY_const/static/extern/define的基本

MY_const/static/extern/define的基本

作者: _Weak | 来源:发表于2017-02-04 18:10 被阅读11次

    1. 宏的使用

    • 常用的字符串抽成宏(注: 宏只会分配一次内存存在静态区 测试方法: %p打印地址信息)
    • 常用的代码抽成宏

    2. const的使用

    • 常量 只能修饰右边的变量:基本指针/对象
    • 当有字符串常量的时候, 苹果推荐我们使用const
    • 使用const修饰全局变量位只读, 放于变量左边
    • 使用const定义一个全局参数
    //定义全局变量
    NSString * const name = @"我是不可修改的";
    
    //定义不可修改参数
    -(void)test:(NSString * const)name{
        //name不可修改
    }
    
    //修饰指针变量
    -(void)test:(int *const)p{
        //p指针第值不允许自己修改
    }
    int a = 10;
    [self test:&a];
    

    3. const与宏的区别

    • 编译时刻: 宏:预编译 const: 编译时
    • 编译检查: 宏:不会检查错误 const:会检查错误
    • 宏可以定义代码(好处)
    • 宏会造成编译缓慢(坏处)

    4. static与const的使用

    static的作用

    • 修饰局部变量
      延长局部变量的生命周期,只要程序运行, 局部变量就会一直存在, 只会分配一次内存
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
        static int i = 0;//只分配一次内存, 断点调试
        i++;
        NSLog(@"点击次数: %i",i);
    }
    
    • 修饰全局变量
      只会修改全局变量的作用域,表示只能当前文件内使用
          //定义静态全局变量,表示只能当前文件内使用
          static int const i = 0;
    

    extern的作用

    • 只能声明一个变量,不能定义变量,不可初始化参数值

    // 使用场景
    extern int a;//调用其他文件的全局变量

    5. static与const的联合使用

    • static和const修饰全局变量
      static修饰全局变量, 修改作用域表示在当前文件中使用
      const修饰变量,表示只读
      联合使用: 静态全局只读变量
    static NSString * const name = @"我是不可修改的,只能在本文件中使用";
    

    extern和const的联合使用

    • 定义.h和.m文件
    • .h文件
    //声明
    //定义全局变量
    /**********首页模块**********/
    UIKIT_EXTERN NSString * const name1;
    

    UIKIT_EXTERN NSString * const name2;

    UIKIT_EXTERN NSString * const name3;

    UIKIT_EXTERN NSString * const name4;

    UIKIT_EXTERN NSString * const name5;
    /**************************/

    >.m文件
    >```
    >//定义全局变量
    >/**********首页模块**********/
    >NSString * const name1 = @"123";
    
    >NSString * const name2 = @"123";
    
    >NSString * const name3 = @"123";
    
    >NSString * const name4 = @"123";
    
    >NSString * const name5 = @"123";
    >/**************************/
    >```
    >- 使用方法
      导入.h文件,直接使用 name1
    
    
    ##6. class,superClass,super
    >- super 编译修饰符, 不是指针, 指向父类的标志,本质还是拿当前对象去调用
    >- 定义Person,SonPerson,在子类SonPerson中定义方法
    

    -(void)testPerson
    {
    NSLog(@"%@ %@ %@",[self class],[self superclass],[super class]);
    }

    >- 打印结果
    

    2017-02-04 16:33:38.113 super,superClass,super[22121:2140396] SonPerson Person SonPerson

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    相关文章

      网友评论

          本文标题:MY_const/static/extern/define的基本

          本文链接:https://www.haomeiwen.com/subject/umojittx.html