[static 与 extern]-使用

1:staticspa

  1. 修饰局部变量
  • 被static修饰的局部变量,延长生命周期,跟整个应用程序有关
  • 被static修饰的局部变量,只会分配一次内存
  • 被static修饰的局部变量,何时分配内存?程序一运行就会给static修饰变量分配内

     2.修饰全局变量code

  • 被static修饰的全局变量,做用域会修改,只能在当前文件下使用

 

2:extern生命周期

  1. 声明外部全局变量,注意:extern只能用于声明,不能用于定义
  2. extern工做原理:先会去当前文件下查找有没有对应全局变量,若是没有的话,才会去其余文件下查找

 

代码演示:内存

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    [super touchesBegan:touches withEvent:event];
    // 这种的话,每次都会从新初始化,因此打印的都是1
    int i = 0;
    i++;
    NSLog(@"i=%d",i);
    
    // 使用static修饰的话。只会初始化一次,并且是跟应用程序有关,不会由于这个代码块结束就结束的,如:
    static int j = 0;
    j++;
    NSLog(@"j=%d",j);
    
    
    
    // 怎样验证何时分配内存?
    // 能够在上面两个地方打个断点,你会发现j那里直接跳过,也就是说初始化的时候不是在这里
}
- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 定义
    int b = 3;
    // 只能声明,不能定义
    //extern int a = 3;
    
}

 

3:static 与const 联合使用作用域

  1. static NSString * const cellID = @"ID";

 

 

4:ertern 与 const 联合使用it

  1. 全局变量不能定义在本身的类中,本身建立全局文件管理全局东西,如建立一个GlobelConst.h 和 GlobelConst.m
  2. 在GlobelConst.h中声明,GlobelConst .m中进行定义
#import <Foundation/Foundation.h>


// XJKIT
#ifdef __cplusplus
#define XJKIT_EXTERN		extern "C" __attribute__((visibility ("default")))
#else
#define XJKIT_EXTERN	        extern __attribute__((visibility ("default")))
#endif

XJKIT_EXTERN NSString * const discover_name;
#import "GlobeConst.h"

// 定义整个项目中全局变量
/***************发现*************/
NSString * const discover_name = @"name";


/***************首页*************/
NSString * const home_name = @"name";

 

        3.使用:在哪里使用,导入都文件便可,便可调用全局的变量io

 

意见反馈邮件:1415429879@qq.com
欢迎大家的阅读和赞扬、谢谢!event

相关文章
相关标签/搜索