Подтвердить что ты не робот

Вызов метода класса из этого класса

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

Например:

+classMethodA{
}

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

Ответ 1

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

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

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

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

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

Ответ 2

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

[MyClass classMethodA];

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

Ответ 3

В объекте C 'self' используется для вызова других методов в пределах одного класса.

Итак, вам просто нужно написать

+classMethodB{
    [self classMethodA];
}

Ответ 4

Конечно.

Скажите, что вы определили эти методы:

@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

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

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