OC中的static

1.局部變量中的static


//局部變量
//1.只會被初始化一次,也就是只有一份內(nèi)存。
//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的內(nèi)存地址只有一份,只被初始化了一次,第一次初始化之后是21,21--之后第一次就輸出了20,當?shù)诙握{(diào)用的時候,由于沒有被重新初始化,自然就輸出了19.
復制代碼

2.全局變量中的static


//全局變量
/**
 1.默認情況沒有被static修飾的情況下
 ①作用域是整個項目,項目中任何地方都能通過extern關鍵字來引用
 ②還是只會被初始化一次,內(nèi)存地址同樣只有一份
 */

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;
當繼續(xù)使用extern引用的時候,就會報錯
Undefined symbols for architecture x86_64:
  "_age_", referenced from:
      -[2eController viewDidLoad] in 2Controller.o
錯誤是說在引用age_的時候,找不到這個變量,是因為使用了static修飾,所以除了第一個類自己除外,都訪問不到
復制代碼
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容