从该类中调用类方法
是否有方法从同一个类中的另一个方法调用类方法?从该类中调用类方法
例如:
+classMethodA{
}
+classMethodB{
//I would like to call classMethodA here
}
当然。
假设有定义这些方法:
@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];
}
在一类方法中,self
指类被传递消息。所以,从另一个类方法中(说classMethodB),用途:
+ (void)classMethodB
{
// ...
[self classMethodA];
// ...
}
从一个实例方法(比如instanceMethodB),使用中:
- (void)instanceMethodB
{
// ...
[[self class] classMethodA];
// ...
}
注意,你既不是假定哪一类消息。实际的类可能是一个子类。
您调整了术语。 '[self foo]'用于实例方法,'[MyClass bar]'用于类方法。 –
不是。 “self”的含义取决于你传递的信息。如果你给一个班级发信息,那么“自我”就是班级。如果你发送一个实例,'self'就是实例。我在http://qualitycoding.org/factory-method/ –
中解释了消息自我对类方法的重要性。同意,你在评论中说的是真实的,但是你答案中的术语实际上是倒退的。在实例方法中使用'[self class]'没有太大意义,但它在类方法中是完全有意义的。请记住,实例方法以'-'开始,类方法以'+'开始,使用'self'来引用对象的实例具有语法意义,但是使用'[self class]'来引用对象的实例在句法上没有意义。 '[self class]'涉及引用描述类的对象,而不是类的实例。 –
在目标C中,'self'用于调用同一个类中的其他方法。
所以,你只需要编写
+classMethodB{
[self classMethodA];
}
'self'只适用于实例方法,但问题表明他在说话关于类方法(在方法名前加'+号) –
首先,我们说怎么要发送消息给法?不是如何调用方法?这是在obj-c中说的方法。 – doNotCheckMyBlog
你试过了吗?发生了什么? –
@Craftero你不是指发送消息给对象吗?消息不会发送到方法。 –