2011-11-04 71 views
1

我正在創建一個應用程序,需要找出當前日期是否處於多個日期範圍之一中,並且取決於它所在的位置,它需要將枚舉設置爲一個值。我有以下代碼,但我不知道如何用多個參數調用該函數。另外,啓動一個函數與+或 - 符號有什麼區別?調用具有多個參數的方法

+ (BOOL)rangeFinder:(NSDate*)date isBetweenDate:(NSDate*)beginDate andDate:  (NSDate*)endDate 
{ 
    if ([date compare:beginDate] == NSOrderedAscending) 
     return NO; 

    if ([date compare:endDate] == NSOrderedDescending) 
     return NO; 

    return YES; 
} 

感謝,

赫什

+1

http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocObjectsClasses.html#//apple_ref/doc/uid/TP30001163-CH11-SW1 – Vin

回答

1

以「+」表示方法的方法是一個類方法,所以你並不需要一個實例來調用它...即

[MyClass someMethod]; 

與以' - '開頭的方法相反,它表示實例方法....

MyClass *object = [[MyClass alloc] init]; 
[object someMethod]; 

至於調用與多個PARAMS方法....

BOOL result = [MyClass rangeFinder:myDate isBetweenDate:firstDate andDate:secondDate]; 
0
[YourClass rangeFinder:aDate isBetweenDate:anotherDate andDate:yetAnotherDate]; 

啓動與+類方法的方法。即,將在沒有對象的一個​​實例被稱爲(self將指向的[YourClass class]等價物):

[YourClass myPlusMethod] 

啓動與-實例方法的方法。它被調用你的類的實例(對象):

[yourInstance myMinusMethod] 

以典型的初始化:

yourInstance = [[YourClass alloc] init]; 

alloc類方法並返回一個實例。在這種情況下,您打電話給init

0

當一個方法與+開始時,它表示該方法是一種類方法。這意味着,與其說這是這樣的:

// Calling an instance method. 
[self doSomething]; 

你會調用它:

// Calling a class method. 
[ClassName doSomething]; 

你並不需要一個對象的實例調用類的方法。您可能認爲這意味着代碼運行得更快,因爲您不需要保持對象,但據我所知,運行時實際上會創建一個對象來執行您的方法,從而導致顯着的無響應如果你經常(數千次)調用類方法。另一方面,以-開頭的方法是實例方法。爲了調用它們,你首先需要創建一個對象的實例。例如:

// Create the object. 
SomeObject *tSomeObject = [[SomeObject alloc] init]; 

// Calling the method. 
[tSomeObject doSomething]; 

調用帶有多個參數的方法的工作方式與調用一個參數的方法相同。以下是它的工作方式:

[ClassName rangeFinder:date1 isBetweenDate:date2 andDate:date3];

我會考慮將方法簽名從rangeFinder:isBetweenDate:andDate:改爲更像date:isBetweenDate:andDate:的東西。您可能還想考慮date3的選項小於date2。目前您的實施將返回NO,但它似乎你希望它返回YES

+0

請問爲什麼?我被低估了? – FreeAsInBeer

相關問題