Obj-C 類方法簡(jiǎn)介
羅朝輝(http://www.shnenglu.com/kesalin/)
CC許可,轉(zhuǎn)載請(qǐng)注明出處
一,Objective C 的類方法(class method),即 static 方法,是用 + 修飾的方法。類方法是屬于類對(duì)象的,所以無(wú)需創(chuàng)建類的實(shí)例對(duì)象我們就可以直接使用它們。使用形式為:
[ClassName classMethod];
在這里 ClassName 代表的就是一個(gè)類對(duì)象,而不是作為一種類型。類名只有出現(xiàn)在接收消息的表達(dá)式中才代表一個(gè)類對(duì)象,其他情況下都表示一種類型。
二,類方法可以繼承自基類,就像普通的類成員方法一樣。有一個(gè)特別的類方法 + (void) initialize,在類接收到任何消息之前,運(yùn)行時(shí)系統(tǒng)會(huì)向類對(duì)象發(fā)送這個(gè)消息,因此我們可以在這個(gè)函數(shù)里對(duì)類對(duì)象做一些初始化,比如初始化 static 變量等等。在 NSObject 中,該方法什么也不做。
三,當(dāng)類對(duì)象接收到一個(gè)消息卻沒(méi)有相應(yīng)的類方法響應(yīng)時(shí),運(yùn)行時(shí)系統(tǒng)會(huì)去檢查是否存在一個(gè) root (通常是 NSObject)的實(shí)例方法能夠響應(yīng),如果能夠響應(yīng)就會(huì)執(zhí)行 root 的成員方法來(lái)響應(yīng)。只有在這種情況下,類對(duì)象才能夠執(zhí)行實(shí)例方法!再次聲明類對(duì)象執(zhí)行實(shí)例方法的條件:
1,類對(duì)象沒(méi)有相應(yīng)的類方法來(lái)響應(yīng)某個(gè)發(fā)送至它的消息;
2,root 類定義了能夠響應(yīng)這個(gè)消息的實(shí)例方法。
四,類方法的返回值類型默認(rèn)為 id,也能接受不定參數(shù),這些都與實(shí)例方法是一致的。例如:
+ makeGroup:group, ...;
五,在類方法中使用 self 和 super,這時(shí) self 和 super 指代的都是類對(duì)象,而非實(shí)例對(duì)象,這一點(diǎn)要特別注意。推薦的工廠方法寫(xiě)法如下,在這里使用 self class 而不是直接寫(xiě)類名,是為了應(yīng)對(duì)子類調(diào)用該函數(shù)的情況。
+ (id) getInstance
{
id instance = [[[self class] alloc] init];
return [instance autorelease];
}