web-dev-qa-db-ja.com

そのクラス内からクラスメソッドを呼び出す

同じクラス内の別のメソッドからクラスメソッドを呼び出す方法はありますか?

例えば:

+classMethodA{
}

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

クラスメソッドでは、selfはメッセージが送信されるクラスを指します。したがって、別のクラスメソッド(たとえばclassMethodB)内から、以下を使用します。

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

インスタンスメソッド(instanceMethodBなど)内から、以下を使用します。

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

どちらも、メッセージを送信しているクラスを想定していないことに注意してください。実際のクラスはサブクラスの場合があります。

61
Jon Reid

次のように単純にする必要があります。

[MyClass classMethodA];

それが機能しない場合は、クラスのインターフェースでメソッドシグネチャが定義されていることを確認してください。 (通常は.hファイル)

8
Tom Jefferys

Objective Cでは、「self」は同じクラス内の他のメソッドを呼び出すために使用されます。

だからあなたはただ書く必要があります

+classMethodB{
    [self classMethodA];
}
4
Indra Adam

承知しました。

次のメソッドが定義されているとします。

@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];
}
3
NSGod