Objective-C語(yǔ)法之static關(guān)鍵字的那些事兒
學(xué)習(xí)過(guò)Java 或者 C 語(yǔ)言的朋友應(yīng)該很清楚static關(guān)鍵字吧?在某個(gè)類(lèi)中聲明一個(gè)static 靜態(tài)變量, 其他類(lèi)中想使用它或者修改它不用new 這個(gè)對(duì)象 ,直接使用它的類(lèi)名方可直接拿到這個(gè)靜態(tài)變量的對(duì)象,遍可以在其他類(lèi)中任意修改這個(gè)變量的數(shù)值。
在Objective-C 的語(yǔ)法中聲明后的static靜態(tài)變量在其他類(lèi)中是不能通過(guò)類(lèi)名直接訪(fǎng)問(wèn)的,它的作用域只能是在聲明的這個(gè).m文件中 。不過(guò)可以調(diào)用這個(gè)類(lèi)的方法間接的修改這個(gè)靜態(tài)變量的值。MOMO通過(guò)一個(gè)例子詳細(xì)的解析一下static關(guān)鍵字的使用。
類(lèi)的創(chuàng)建方法就不多說(shuō)了,之前的文章有寫(xiě)過(guò)。
MyClass.h
警告: static 寫(xiě)在interface外面編譯是沒(méi)有錯(cuò)誤的,但是編譯器會(huì)報(bào)警告,這么說(shuō)這樣的寫(xiě)法是不被編輯器認(rèn)可的。
錯(cuò)誤:static 寫(xiě)在
interface里面會(huì)直接報(bào)錯(cuò),顯然這樣的語(yǔ)法是不被認(rèn)可的。
+(void) addCount; 各位盆友們注意一下這法方法前面的+號(hào)。 它的意思是標(biāo)致這個(gè)方法為靜態(tài)方法,標(biāo)志+號(hào)后不用創(chuàng)建這個(gè)對(duì)象通過(guò)類(lèi)名可以直接調(diào)用這個(gè)靜態(tài)方法。 而之前方法前用過(guò)的-號(hào),標(biāo)志-號(hào)后的方法必須通過(guò)本類(lèi)的對(duì)象或者在本來(lái)中才可以使用。
MyClass.m
static關(guān)鍵字聲明的變量必須放在implementation外面,或者方法中,
如果不為它賦值默認(rèn)為0,它只在程序開(kāi)機(jī)初始化一次。
+(void)addCount 因?yàn)闃?biāo)識(shí)了+號(hào),所以這個(gè)方法無(wú)需使用這個(gè)類(lèi)的對(duì)象調(diào)用。直接使用類(lèi)名方可調(diào)用這個(gè)方法。
main.m
無(wú)需alloc這個(gè)對(duì)象,直接使用MyClass類(lèi)名方可直接調(diào)用addCount方法。
運(yùn)行這個(gè)程序,初始化賦值為100 ,調(diào)用方法的時(shí)候++,所以打印出來(lái)的數(shù)值為101。
MyClass.m
將static整型變量定義在方法中,并且為其賦值100。
main.m
循環(huán)5次調(diào)用這個(gè)方法,看看結(jié)果是什么樣字,結(jié)果肯定是101吧。。
程序員不要相信任何人說(shuō)的任何有關(guān)程序的話(huà),一定相信自己,相信自己眼睛看到的一切,哇咔咔~~
可見(jiàn)即使將static靜態(tài)變量寫(xiě)在方法中,它的初始化也是在程序開(kāi)機(jī)時(shí),程序一旦啟動(dòng)以后static是不能在創(chuàng)建的。所以程序在這里調(diào)用了5次這個(gè)方法,sCount的值并沒(méi)有因?yàn)橹匦聞?chuàng)建static sCount而改變,而是將sCount的值一直存在內(nèi)存中。
static關(guān)鍵字在任何語(yǔ)言中都是非常重要的,它有優(yōu)點(diǎn)也有缺點(diǎn),善用static 關(guān)鍵字是一個(gè)不錯(cuò)地選擇哦,哇咔咔~
前幾天上不了網(wǎng) 悲劇啊~~ 今天去按摩店 針灸 拔火罐 按摩 刮痧 太爽了,MOMO向廣大盆友們問(wèn)好,有什么都沒(méi)有有一個(gè)好身體重要,多去健身 保健 鍛煉身體 搞IT的盆友們 你們懂得 嘿嘿。。
Objective-C語(yǔ)法之static關(guān)鍵字的那些事兒(六)