同じクラス内の別のメソッドからクラスメソッドを呼び出す方法はありますか?
例えば:
+classMethodA{
}
+classMethodB{
//I would like to call classMethodA here
}
クラスメソッドでは、self
はメッセージが送信されるクラスを指します。したがって、別のクラスメソッド(たとえばclassMethodB)内から、以下を使用します。
+ (void)classMethodB
{
// ...
[self classMethodA];
// ...
}
インスタンスメソッド(instanceMethodBなど)内から、以下を使用します。
- (void)instanceMethodB
{
// ...
[[self class] classMethodA];
// ...
}
どちらも、メッセージを送信しているクラスを想定していないことに注意してください。実際のクラスはサブクラスの場合があります。
次のように単純にする必要があります。
[MyClass classMethodA];
それが機能しない場合は、クラスのインターフェースでメソッドシグネチャが定義されていることを確認してください。 (通常は.hファイル)
Objective Cでは、「self」は同じクラス内の他のメソッドを呼び出すために使用されます。
だからあなたはただ書く必要があります
+classMethodB{
[self classMethodA];
}
承知しました。
次のメソッドが定義されているとします。
@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];
}