Вызов метода с несколькими аргументами - PullRequest
1 голос
/ 04 ноября 2011

Я создаю приложение, которое должно выяснить, находится ли текущая дата в одном из нескольких диапазонов дат, и в зависимости от того, в каком она находится, ему нужно установить для перечисления значение. У меня есть следующий код, но я не знаю, как вызвать функцию с несколькими аргументами. Кроме того, в чем разница между запуском функции со знаком + или -?

+ (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 ]

1 голос
/ 04 ноября 2011
1 голос
/ 04 ноября 2011

Метод, начинающийся с '+', обозначает, что метод является методом класса, поэтому вам не нужен экземпляр для его вызова ... т.е.

[MyClass someMethod];

В отличие от метода, начинающегося с '-', который обозначает метод экземпляра ....

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

Что касается вызова методов с несколькими параметрами ....

BOOL result = [MyClass rangeFinder:myDate isBetweenDate:firstDate andDate:secondDate];
0 голосов
/ 04 ноября 2011

Когда метод начинается с +, это означает, что метод является методом класса . Это означает, что вместо того, чтобы называть это как:

// 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 иDate: date3];

Я бы рассмотрел изменение сигнатуры метода с rangeFinder:isBetweenDate:andDate: на что-то более похожее на date:isBetweenDate:andDate:. Вы также можете рассмотреть вариант, когда date3 меньше date2. В настоящее время ваша реализация вернет NO, но, похоже, вы захотите, чтобы она вернула YES.

0 голосов
/ 04 ноября 2011
[YourClass rangeFinder:aDate isBetweenDate:anotherDate andDate:yetAnotherDate];

Метод, который начинается с +, это метод класса .То есть он будет вызываться без экземпляра объекта (self будет указывать на эквивалент [YourClass class]):

[YourClass myPlusMethod]

Метод, начинающийся с -, представляет собой метод экземпляра .Он вызывается для экземпляра (объекта) вашего класса:

[yourInstance myMinusMethod]

Примите типичную инициализацию:

yourInstance = [[YourClass alloc] init];

alloc является методом класса и возвращает экземпляр.В этом случае вы звоните init.

...