我即將創建一個將兩個NSDateComponents添加在一起的函數,將它放入C風格函數還是應該用Obj-C方法有什麼好處?我應該使用C函數還是Obj-C方法?
是否有任何理由使用一個而不是另一個,或者我應該堅持Obj-C?
BTW:不,它讓我相信任何區別,但是這是在iPhone上的應用程序
非常感謝
我即將創建一個將兩個NSDateComponents添加在一起的函數,將它放入C風格函數還是應該用Obj-C方法有什麼好處?我應該使用C函數還是Obj-C方法?
是否有任何理由使用一個而不是另一個,或者我應該堅持Obj-C?
BTW:不,它讓我相信任何區別,但是這是在iPhone上的應用程序
非常感謝
在Objective-C中,恰當的術語不是「對某個對象調用方法」,而是「向對象發送消息」。
使決定變得簡單:您是否將消息發送給對象?你是在告訴它做些什麼或要求提供信息嗎?如果是這樣,那麼通過將代碼放在方法中使對象對該消息作出響應。如果不是(如果任務獨立於任何對象),則將其設置爲一個函數。
您可以瀏覽Foundation functions,UIKit functions和AppKit functions列表,瞭解使屬於某個函數而不是方法的對象獨立類型的示例。
我要創建一個函數,它增加了NSDateComponents在一起是沒有任何優勢,把這個在C風格的功能,還是應該走了的OBJ-C的方法?
我會把它放入一個實例方法分類到NSDateComponents。電話(消息)看起來像[componentsA componentsByAddingComponents_PRH:componentsB]
。 (請注意,我包括我的縮寫,因此如果蘋果不斷增加自己的componentsByAddingComponents:
方法,我的應用程序的行爲不會突然改變,當用戶升級他們的設備連接到新的操作系統。)這
對於「發送消息」(真的非常重要的區別!)以及不是每件事情最好作爲一種方法完成的最佳方式(至少在單個調度語言中)。 – 2010-05-01 18:22:01
我不是你所說的什麼明確的「添加到NSDateComponents在一起」。你能解釋一下你需要做什麼嗎?
是否使它成爲函數或方法很大程度上是您期望如何使用它的問題。是否有某些特定的對象需要這樣做,或者需要在您的程序的許多地方出現?
函數調用的開銷略低於Objective C方法調用,但這不是一個很好的使用它的理由,除非您已經在該區域中發現了嚴重的性能問題。目標C程序看起來與純C程序有很大的不同。保持語言的外觀和慣用語的一致性是一個很好的理由,可以將幾乎所有簡單的行爲作爲方法而不是C函數來實現。
看看Cocoa-Touch在哪裏使用函數而不是方法來舉例說明這種方法。
更有可能您希望使用Objective-C方法作爲NSDateComponents上的類別實現。
@interface NSDateComponents (DGCalculations)
/*!
\brief Add date components
\details Add the given date components to the receiver and
return the result as a new date components object.
*/
- (NSDateComponents *)componentsByAddingComponents:(NSDateComponents *)components;
@end
@implementation NSDateComponents (DGCalculations)
- (NSDateComponents *)componentsByAddingComponents:(NSDateComponents *)components {
NSDateComponents *result = [[[NSDateComponents alloc] init] autorelease];
[result setDay:[self day] + [components day]];
// handle the rest
return result;
}
@end
使用,然後被證明是一個更好一點:
result = [firstComponents add:secondComponents];
你的意思是「增加了兩個NSDateComponents」或「添加了新功能的NSDateComponents類」? – progrmr 2010-05-01 20:36:01
道歉我的意思是「增加兩個NSDateComponets」。帖子已被編輯以糾正此問題。 – 2010-05-01 21:35:54