oc中的static

關於static從如下幾個例子中來講明spa

1.局部變量中的staticcode

//局部變量
//1.只會被初始化一次,也就是隻有一分內存。
//2.生命週期被改變,一直到程序結束才釋放

// age沒有被static修飾的時候
- (void)Aboutstatic
{
    int age = 21;
    age--;
    NSLog(@"age==%d",age);
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //在此打印三次結果,看看輸出
    [self Aboutstatic];
    [self Aboutstatic];
    [self Aboutstatic];
    
}

//控制檯輸出結果能夠看到,變量age每次都被初始化爲21,因此三次打印結果都爲20
2016-01-15 14:41:47.907 [1754:258152] age==20
2016-01-15 14:41:47.908 [1754:258152] age==20
2016-01-15 14:41:47.908 [1754:258152] age==20

//age經過static修飾以後
- (void)Aboutstatic
{
    static int age = 21;
    age--;
    NSLog(@"age==%d",age);
}
//看看控制檯輸出結果
2016-01-15 14:49:58.475 [1768:266933] age==20
2016-01-15 14:49:58.476 [1768:266933] age==19
2016-01-15 14:49:58.476 [1768:266933] age==18

//第二次輸出結果明顯與第一次不同,使用了static修飾以後,age的內存地址只有一份,只被初始化了一次,第一次初始化以後是21,21--以後第一次就輸出了20,當第二次調用的時候,因爲沒有被從新初始化,天然就輸出了19.

 2.全局變量中的staticblog

//全局變量
/**
 1.默認狀況沒有被static修飾的狀況下
 ①做用域是整個項目,項目中任何地方都能經過extern關鍵字來引用
 ②仍是隻會被初始化一次,內存地址一樣只有一份
 */

1.第一個類中聲明一個全局變量和一個方法
int age_ = 21;

- (void)logAge
{
    NSLog(@"age_==%d",age_);
}

2.在第二個類中使用extern來訪問age_
    extern int age_;
    NSLog(@"%d",age_);
看到控制檯打印輸出
2016-01-15 15:26:50.224 [1810:289550] 21


/**
 2.被static修飾的狀況下
 ①做用域只限於當前文件,項目中任何地方都不能經過extern關鍵字來引用
 ②改變了做用域,可是沒有改變生命週期
 */
static int age_ = 21;
當繼續使用extern引用的時候,就會報錯
Undefined symbols for architecture x86_64:
  "_age_", referenced from:
      -[2eController viewDidLoad] in 2Controller.o
錯誤是說在引用age_的時候,找不到這個變量,是由於使用了static修飾,因此除了第一個類本身除外,都訪問不到
相關文章
相關標籤/搜索