调用具有多个参数的方法

时间:2011-11-04 10:59:18

标签: objective-c function compare nsdate

我正在创建一个应用程序,需要查明当前日期是否属于多个日期范围之一,并且根据它所在的日期,它需要将枚举设置为值。我有以下代码,但我不知道如何使用多个参数调用该函数。另外,使用+或 - 符号启动函数有什么区别?

+ (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;
}

谢谢,

赫什

4 个答案:

答案 0 :(得分:1)

以'+'开头的方法表示该方法是一个类方法,因此您不需要实例来调用它...即

[MyClass someMethod];

与以' - '开头的方法相反,后者表示实例方法....

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

至于调用多个参数的方法....

BOOL result = [MyClass rangeFinder:myDate isBetweenDate:firstDate andDate:secondDate];

答案 1 :(得分:1)

答案 2 :(得分:0)

[YourClass rangeFinder:aDate isBetweenDate:anotherDate andDate:yetAnotherDate];

+开头的方法是类方法。也就是说,它将在没有对象实例的情况下被调用(self将指向等效于[YourClass class]):

[YourClass myPlusMethod]

-开头的方法是实例方法。它会在您的类的实例(对象)上调用:

[yourInstance myMinusMethod]

进行典型的初始化:

yourInstance = [[YourClass alloc] init];

alloc类方法并返回一个实例。在那个例子中,你正在呼叫init

答案 3 :(得分: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