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

Objective 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 に答える