1.局部變量中的static
//局部變量
//1.只會(huì)被初始化一次彤枢,也就是只有一份內(nèi)存凤跑。
//2.生命周期被改變耍共,一直到程序結(jié)束才釋放
// age沒(méi)有被static修飾的時(shí)候
- (void)Aboutstatic
{
int age = 21;
age--;
NSLog(@"age==%d",age);
}
- (void)viewDidLoad {
[super viewDidLoad];
//在此打印三次結(jié)果,看看輸出
[self Aboutstatic];
[self Aboutstatic];
[self Aboutstatic];
}
//控制臺(tái)輸出結(jié)果可以看到格了,變量age每次都被初始化為21,所以三次打印結(jié)果都為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通過(guò)static修飾之后
- (void)Aboutstatic
{
static int age = 21;
age--;
NSLog(@"age==%d",age);
}
//看看控制臺(tái)輸出結(jié)果
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
//第二次輸出結(jié)果明顯與第一次不一樣,使用了static修飾之后析藕,age的內(nèi)存地址只有一份,只被初始化了一次凳厢,第一次初始化之后是21账胧,21--之后第一次就輸出了20,當(dāng)?shù)诙握{(diào)用的時(shí)候先紫,由于沒(méi)有被重新初始化治泥,自然就輸出了19.
復(fù)制代碼
2.全局變量中的static
//全局變量
/**
1.默認(rèn)情況沒(méi)有被static修飾的情況下
①作用域是整個(gè)項(xiàng)目,項(xiàng)目中任何地方都能通過(guò)extern關(guān)鍵字來(lái)引用
②還是只會(huì)被初始化一次遮精,內(nèi)存地址同樣只有一份
*/
1.第一個(gè)類中聲明一個(gè)全局變量和一個(gè)方法
int age_ = 21;
- (void)logAge
{
NSLog(@"age_==%d",age_);
}
2.在第二個(gè)類中使用extern來(lái)訪問(wèn)age_
extern int age_;
NSLog(@"%d",age_);
看到控制臺(tái)打印輸出
2016-01-15 15:26:50.224 [1810:289550] 21
/**
2.被static修飾的情況下
①作用域只限于當(dāng)前文件居夹,項(xiàng)目中任何地方都不能通過(guò)extern關(guān)鍵字來(lái)引用
②改變了作用域,但是沒(méi)有改變生命周期
*/
static int age_ = 21;
當(dāng)繼續(xù)使用extern引用的時(shí)候本冲,就會(huì)報(bào)錯(cuò)
Undefined symbols for architecture x86_64:
"_age_", referenced from:
-[2eController viewDidLoad] in 2Controller.o
錯(cuò)誤是說(shuō)在引用age_的時(shí)候准脂,找不到這個(gè)變量,是因?yàn)槭褂昧藄tatic修飾眼俊,所以除了第一個(gè)類自己除外意狠,都訪問(wèn)不到
復(fù)制代碼