關於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修飾,因此除了第一個類本身除外,都訪問不到