Вызовите метод класса из этого класса - PullRequest
25 голосов
/ 03 сентября 2011

Есть ли способ вызвать метод класса из другого метода в том же классе?

Например:

+classMethodA{
}

+classMethodB{
    //I would like to call classMethodA here
}

Ответы [ 4 ]

60 голосов
/ 03 сентября 2011

В методе класса self относится к сообщаемому классу.Поэтому из другого метода класса (скажем, classMethodB) используйте:

+ (void)classMethodB
{
    // ...
    [self classMethodA];
    // ...
}

Из метода экземпляра (скажем, instanceMethodB) используйте:

- (void)instanceMethodB
{
    // ...
    [[self class] classMethodA];
    // ...
}

Обратите внимание, что ни один из них не предполагает, какой класс выобмен сообщениями.Фактический класс может быть подклассом.

8 голосов
/ 03 сентября 2011

Должно быть так же просто, как:

[MyClass classMethodA];

Если это не работает, убедитесь, что у вас есть сигнатура метода, определенная в интерфейсе класса. (Обычно в файле .h)

4 голосов
/ 11 апреля 2012

В цели C «self» используется для вызова других методов в том же классе.

Так что вам просто нужно написать

+classMethodB{
    [self classMethodA];
}
3 голосов
/ 03 сентября 2011

Конечно.

Допустим, у вас определены следующие методы:

@interface MDPerson : NSObject {
    NSString *firstName;
    NSString *lastName;

}

+ (id)person;
+ (id)personWithFirstName:(NSString *)aFirst lastName:(NSString *)aLast;
- (id)initWithFirstName:(NSString *)aFirst lastName:(NSString *)aLast;


@property (copy) NSString *firstName;
@property (copy) NSString *lastName;

@end

Первые 2 метода класса могут быть реализованы следующим образом:

+ (id)person {
   return [[self class] personWithFirstName:@"John" lastName:@"Doe"];
}

+ (id)personWithFirstName:(NSString *)aFirst lastName:(NSString *)aLast {
    return [[[[self class] alloc] initWithFirstName:aFirst lastName:aLast]
                                                      autorelease];
}
...