2012-07-31 40 views
0

類的方法,我知道類方法和對象方法之間的差異,但我不明白爲什麼我們使用的iOS類的方法?任何人都可以給我例子,所以我可以理解的.. ??使用的iOS中

+1

它完全是愚蠢這是downvoted儘管是在谷歌上的結果,顯然很多開發者 – ChuckKelly 2016-03-13 04:14:03

+0

@ChuckKelly同意很有幫助

+ (MyRequestHandler *) getRequestHandler { if (requestHandler == nil) { requestHandler = [[MyRequestHandler alloc]init]; } return requestHandler; } 

其他類可以達到這個實例。也許更好的方式來重述這個問題將是:使用/創建類方法與實例方法的優點是什麼? – alexisSchreier 2017-01-28 22:29:55

回答

0

類方法用於庫例程。要訪問這些方法,不必創建它的對象。

例如,有些時候,它可以讓你輕鬆初始化創建一個對象。

NSArray *arr = [NSArray array]; 
1

類方法是類處理的方法,實例方法是各個實例上的方法。

類方法的常見用例是方便的分配器,如NSString+stringWithFormat:。這是相同的(如果您不使用ARC,則附加autorelease)使用[[NSString alloc] initWithFormat:],但可以節省大量時間。

又如MFMailComposeViewController的​​方法。沒有必要先創建一個實例來查看是否支持發送郵件。這個類更瞭解這個,所以這個方法是一個類方法而不是實例方法。

Similar question

1

類方法和對象的方法。

@interface TheClassA : NSObject 
+ (TypeA)classMethod; 
- (TypeB)objectMethod; 
@end 

@implementation TheClassA 

+ (TypeA)classMethod 
{ 
} 

- (TypeB)objectMethod 
{ 
} 

@end 



main() 
{ 
    [TheClassA classMethod]; // Correct!!! 
    [TheClassA objectMethod]; // Wrong!!! 

    TheClassA *obj = [[TheClassA alloc] init]; 
    [obj classMethod]; // Wrong; 
    [obj objectMethod]; // Correct; 
    [obj.class classMethod]; // Correct 
    [obj.class objectMethod]; // Wrong 
} 

類方法的範圍與通用C語言函數類似。這是全球性的方法。 但是...對象方法只給出有效的對象... 類方法不能改變它的類屬性,不能發送消息給對象。 但是,對象方法可以將消息發送到對象並可以更改屬性。

祝你好運。

1

我經常使用類方法來創建一個使用名爲「單身」設計模式的程序。例如,如果我有一個處理來自其他類的請求的類,那麼我只需要一個請求處理類的實例,並且我希望我的整個程序使用同一個類。在請求處理類中,我放置了一個靜態變量來保存實例。

static MyRequestHandler *requestHandler; 

並使用類方法來獲得它,如果它不存在,我先做它,然後保存它。在那裏像這樣的代碼

MyRequestHandler *requestHandler = [MyRequestHandler getRequestHandler];