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