2011-09-02 75 views
25

是否有方法从同一个类中的另一个方法调用类方法?从该类中调用类方法

例如:

+classMethodA{ 
} 

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

首先,我们说怎么要发送消息给法?不是如何调用方法?这是在obj-c中说的方法。 – doNotCheckMyBlog

+0

你试过了吗?发生了什么? –

+0

@Craftero你不是指发送消息给对象吗?消息不会发送到方法。 –

回答

8

应尽可能简单:

[MyClass classMethodA]; 

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

+1

这是一种方法;但是,这不会考虑分类。在大多数情况下,使用[self classMethodA]可能更为明智。正如我在类方法中所理解的那样,“self”将是类对象(因为类方法是类的实例方法)。因此,MyClass的方法将被调用,但不会调用MyClassSubclass的classMethodA – csga5000

+0

还要注意,他在“同一类中”的问题中提到 – csga5000

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]; 
} 
59

在一类方法中,self指类被传递消息。所以,从另一个类方法中(说classMethodB),用途:

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

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

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

注意,你既不是假定哪一类消息。实际的类可能是一个子类。

+1

您调整了术语。 '[self foo]'用于实例方法,'[MyClass bar]'用于类方法。 –

+8

不是。 “self”的含义取决于你传递的信息。如果你给一个班级发信息,那么“自我”就是班级。如果你发送一个实例,'self'就是实例。我在http://qualitycoding.org/factory-method/ –

+0

中解释了消息自我对类方法的重要性。同意,你在评论中说的是真实的,但是你答案中的术语实际上是倒退的。在实例方法中使用'[self class]'没有太大意义,但它在类方法中是完全有意义的。请记住,实例方法以'-'开始,类方法以'+'开始,使用'self'来引用对象的实例具有语法意义,但是使用'[self class]'来引用对象的实例在句法上没有意义。 '[self class]'涉及引用描述类的对象,而不是类的实例。 –

4

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

所以,你只需要编写

+classMethodB{ 
    [self classMethodA]; 
} 
+1

'self'只适用于实例方法,但问题表明他在说话关于类方法(在方法名前加'+号) –