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修飾,所以除了第一個類自己除外,都訪問不到
復制代碼