關(guān)鍵字static
兩個(gè)概念:生命周期戈咳、作用域
生命周期:這個(gè)變量能存活多久耳高,它所占用的內(nèi)存什么時(shí)候分配,什么時(shí)候收回颗祝。
作用域:這個(gè)變量在什么區(qū)域是可見的浊闪,可以拿來用的。
static分兩種情況:修飾局部變量螺戳、修飾全局變量
1搁宾、static修飾局部變量
局部變量:在函數(shù)/方法/代碼塊內(nèi)聲明的變量。它的生命周期温峭、作用域都是在這個(gè)代碼塊內(nèi)猛铅。
局部變量 存儲(chǔ)在棧區(qū)(stack)一旦出了這個(gè)代碼塊,存儲(chǔ)局部變量的這個(gè)棧內(nèi)存就會(huì)被回收凤藏,局部變量也就被銷毀奸忽。
當(dāng)用static修飾局部變量時(shí)堕伪,變量被稱為靜態(tài)局部變量,和全局變量栗菜,靜態(tài)全局變量一樣欠雌,是存儲(chǔ)在‘靜態(tài)存儲(chǔ)區(qū)’。
存儲(chǔ)在 靜態(tài)存儲(chǔ)區(qū) 的變量疙筹,其內(nèi)存直到 程序結(jié)束 才會(huì)被銷毀富俄。
即,生命周期是整個(gè)源程序而咆。
靜態(tài)局部變量的生命周期是整個(gè)源程序霍比,但,作用域是聲明它的代碼塊內(nèi)暴备。
2悠瞬、static修飾全局變量
當(dāng)全局變量沒有使用static修飾時(shí)
其存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū),直到程序結(jié)束才銷毀涯捻。也就是其作用域是整個(gè)源程序浅妆。
我們可以使用extern關(guān)鍵字來引用這個(gè)全局變量。
當(dāng)全局變量使用static修飾時(shí)
其生命周期沒有變障癌,依舊是在程序結(jié)束時(shí)才銷毀凌外。但是其作用域變了。現(xiàn)在只限于申明它的這個(gè)文件才可見涛浙。
使用extern關(guān)鍵字無法引用這個(gè)全局變量康辑。
全局變量本來是在整個(gè)源程序的所有文件都可見,static修飾后蝗拿,改為只在申明自己的文件可見晾捏,即修改了作用域。
staticintnum;//僅本文件可見@implementation@end
關(guān)鍵字const
主要強(qiáng)調(diào)變量是不可修改的哀托。
const修飾的是其右邊的值惦辛,也就是const右邊的這個(gè)整體的值不能改變。
staticNSStringconst*name =@"abc";staticconstNSString*name =@"bac";//兩種寫法等價(jià)// name是 指針變量仓手, *name是 指針指向的變量的值
*是指針指向符胖齐,主要看*與const的前后關(guān)系
NSStringconst*str =@"abc";// 值不變
1、const在*前:
const修飾*str這個(gè)整體嗽冒,所以這個(gè)整體不能改變呀伙,這個(gè)整體是str指向的內(nèi)存中的值。
NSString*conststr =@"abc";// 地址不變
2添坊、const在*后:
表示str指向的地址不能改變
關(guān)鍵字extern
主要是用來引用全局變量剿另,它的原理是先在本文件中查找,查找不到再到其他文件中查找。
.h中
@interfacePDConst:NSObjectexternNSString*constappBaseURL;@end
.m中
@implementationPDConstNSString*constcurrentBaseURL =@"http://192....";@end
鏈接:http://www.reibang.com/p/7fafc3157432