2010-05-01 117 views
1

我即將創建一個將兩個NSDateComponents添加在一起的函數,將它放入C風格函數還是應該用Obj-C方法有什麼好處?我應該使用C函數還是Obj-C方法?

是否有任何理由使用一個而不是另一個,或者我應該堅持Obj-C?

BTW:不,它讓我相信任何區別,但是這是在iPhone上的應用程序

非常感謝

+2

你的意思是「增加了兩個NSDateComponents」或「添加了新功能的NSDateComponents類」? – progrmr 2010-05-01 20:36:01

+0

道歉我的意思是「增加兩個NSDateComponets」。帖子已被編輯以糾正此問題。 – 2010-05-01 21:35:54

回答

8

在Objective-C中,恰當的術語不是「對某個對象調用方法」,而是「向對象發送消息」。

使決定變得簡單:您是否將消息發送給對象?你是在告訴它做些什麼或要求提供信息嗎?如果是這樣,那麼通過將代碼放在方法中使對象對該消息作出響應。如果不是(如果任務獨立於任何對象),則將其設置爲一個函數。

您可以瀏覽Foundation functions,UIKit functionsAppKit functions列表,瞭解使屬於某個函數而不是方法的對象獨立類型的示例。

我要創建一個函數,它增加了NSDateComponents在一起是沒有任何優勢,把這個在C風格的功能,還是應該走了的OBJ-C的方法?

我會把它放入一個實例方法分類到NSDateComponents。電話(消息)看起來像[componentsA componentsByAddingComponents_PRH:componentsB]。 (請注意,我包括我的縮寫,因此如果蘋果不斷增加自己的componentsByAddingComponents:方法,我的應用程序的行爲不會突然改變,當用戶升級他們的設備連接到新的操作系統。)這

一個現有的例子是NSDecimalNumber's decimalNumberByAdding: method

+2

對於「發送消息」(真的非常重要的區別!)以及不是每件事情最好作爲一種方法完成的最佳方式(至少在單個調度語言中)。 – 2010-05-01 18:22:01

0

我不是你所說的什麼明確的「添加到NSDateComponents在一起」。你能解釋一下你需要做什麼嗎?

是否使它成爲函數或方法很大程度上是您期望如何使用它的問題。是否有某些特定的對象需要這樣做,或者需要在您的程序的許多地方出現?

3

函數調用的開銷略低於Objective C方法調用,但這不是一個很好的使用它的理由,除非您已經在該區域中發現了嚴重的性能問題。目標C程序看起來與純C程序有很大的不同。保持語言的外觀和慣用語的一致性是一個很好的理由,可以將幾乎所有簡單的行爲作爲方法而不是C函數來實現。

看看Cocoa-Touch在哪裏使用函數而不是方法來舉例說明這種方法。

2

更有可能您希望使用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]; 
相關問題