2013-03-03 51 views
3

我習慣於函數式編程。現在爲iOS編寫代碼我經常使用類方法(+),而不是創建實例(來自 - )。使用類方法的Objective-C最佳實踐

我通常使用類方法對於小的,經常性的任務 - 如發送異步請求,更新數據庫,存儲/檢索偏好等

這是做正確的事情,或者我應該嘗試改變我的思維更並開始使用實例呢?是否有可能避免一起使用類方法?

+0

如果您不能僅使用C終止自己,有一種方法(儘管並不建議這樣做),你可以得到[應用程序運行](http://stackoverflow.com/questions/10289890/how-to-write-ios-app-purely-in-c)。 – CodaFi 2013-03-03 17:20:07

+0

@CodaFi總是要把我踢出去,是吧? – 2013-04-17 19:18:30

+0

@ RichardJ.RossIII說那個正在拖延月齡問題的人;) – CodaFi 2013-04-17 21:44:16

回答

4

我最好的建議是查看Foundation和Cocoa的工作方式,並做類似的工作。 Objective-C中有一個類方法的地方。

類方法的一些例子包括

[UIView animateWithDuration:0.3 animations:^{ 
    // Animation here... 
}]; 

[NSURLConnection sendAsynchronousRequest:request 
            queue:[NSOperationQueue mainQueue] 
         completionHandler:^(NSURLResponse *response, NSData *date, NSError *error) { 
          // Handle response here ... 
         }]; 
+0

這些更方便的方法和初始化(尤其是動畫之一)比嘗試和真正的類方法,但我明白你的觀點。 +1 – CodaFi 2013-03-03 17:16:25

0

類方法用於當你不需要任何類的實例,你的目的被通過的一個方法調用只會像[[NSUserDefaults standardUserDefaults] synchronize];


在MRC

alloc/init組合使你是一個擁有的參考。這意味着您稍後必須release。 classMethod返回一個非擁有的引用。你可能不會釋放它。

Person *firstPerson=[Person personWithName:@"AnoopVaidya" address:@"India"]; 

在ARC,對於上述沒有這樣differnce。

+1

我會說類方法的用途遠遠大於此。例如,我可以從靜態變量中創建一個「單例」,並使類方法成爲一個訪問器。 – CodaFi 2013-03-03 17:15:15

+0

@CodaFi:是的,應該在答案:) – 2013-03-03 17:16:00

2

Objective C支持第三種替代方法來封裝不需要隱式訪問實例變量的功能 - 它使用「普通」C函數。與類函數不同,「普通」C函數不使用虛擬調度,這在不同的緊密循環中可能很重要。

請注意,類方法比Java,C++和C#的static方法提供更多功能:它們支持覆蓋,讓基類中的類方法在派生類中使用更具體的實現。