[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

相關文章
相關標籤/搜索