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