我習慣於函數式編程。現在爲iOS編寫代碼我經常使用類方法(+),而不是創建實例(來自 - )。使用類方法的Objective-C最佳實踐
我通常使用類方法對於小的,經常性的任務 - 如發送異步請求,更新數據庫,存儲/檢索偏好等
這是做正確的事情,或者我應該嘗試改變我的思維更並開始使用實例呢?是否有可能避免一起使用類方法?
我習慣於函數式編程。現在爲iOS編寫代碼我經常使用類方法(+),而不是創建實例(來自 - )。使用類方法的Objective-C最佳實踐
我通常使用類方法對於小的,經常性的任務 - 如發送異步請求,更新數據庫,存儲/檢索偏好等
這是做正確的事情,或者我應該嘗試改變我的思維更並開始使用實例呢?是否有可能避免一起使用類方法?
我最好的建議是查看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 ...
}];
這些更方便的方法和初始化(尤其是動畫之一)比嘗試和真正的類方法,但我明白你的觀點。 +1 – CodaFi 2013-03-03 17:16:25
類方法用於當你不需要任何類的實例,你的目的被通過的一個方法調用只會像[[NSUserDefaults standardUserDefaults] synchronize];
在MRC
的alloc/init
組合使你是一個擁有的參考。這意味着您稍後必須release
。 classMethod返回一個非擁有的引用。你可能不會釋放它。
即
Person *firstPerson=[Person personWithName:@"AnoopVaidya" address:@"India"];
在ARC,對於上述沒有這樣differnce。
我會說類方法的用途遠遠大於此。例如,我可以從靜態變量中創建一個「單例」,並使類方法成爲一個訪問器。 – CodaFi 2013-03-03 17:15:15
@CodaFi:是的,應該在答案:) – 2013-03-03 17:16:00
Objective C支持第三種替代方法來封裝不需要隱式訪問實例變量的功能 - 它使用「普通」C函數。與類函數不同,「普通」C函數不使用虛擬調度,這在不同的緊密循環中可能很重要。
請注意,類方法比Java,C++和C#的static
方法提供更多功能:它們支持覆蓋,讓基類中的類方法在派生類中使用更具體的實現。
如果您不能僅使用C終止自己,有一種方法(儘管並不建議這樣做),你可以得到[應用程序運行](http://stackoverflow.com/questions/10289890/how-to-write-ios-app-purely-in-c)。 – CodaFi 2013-03-03 17:20:07
@CodaFi總是要把我踢出去,是吧? – 2013-04-17 19:18:30
@ RichardJ.RossIII說那個正在拖延月齡問題的人;) – CodaFi 2013-04-17 21:44:16