27

有没有办法从同一个类中的另一个方法调用一个类方法?

例如:

+classMethodA{
}

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

4 回答 4

65

在类方法中,self指的是被消息传递的类。因此,在另一个类方法(比如 classMethodB)中,使用:

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

从实例方法(例如 instanceMethodB)中,使用:

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

请注意,两者都没有假定您正在发送消息的是哪个类。实际类可能是子类。

于 2011-09-02T23:48:51.493 回答
8

应该很简单:

[MyClass classMethodA];

如果这不起作用,请确保您在类的接口中定义了方法签名。(通常在 .h 文件中)

于 2011-09-02T23:39:51.697 回答
4

在目标 C 中,“self”用于调用同一类中的其他方法。

所以你只需要写

+classMethodB{
    [self classMethodA];
}
于 2012-04-11T18:59:11.430 回答
3

当然。

假设您定义了这些方法:

@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];
}
于 2011-09-02T23:44:28.307 回答