0

私はこの質問をグーグルで検索し、時間をかけて自分で解決しましたが、運が悪かったです。

クラスのユーザーに対して隠されているクラスの静的メソッドを呼び出す必要があります。

// MyClass.h
@interface MyClass : NSObject

@end

// MyClass.m

@implementation MyClass

- (NSString *)myInstanceMethod
{
    return @"result string";
}

+ (NSString *)myStaticMethod
{
    return @"result string";
}

@end

------------------------------------------------------------

// MyCallerClass.m
#import "MyClass.h"

@implementation MyCallerClass

- (void) testMethod
{
    MyClass *inst = [MyClass new];
    // call 1
    NSString *resultInstance    = [inst performSelector:@selector(myInstanceMethod)];
    // call 2
    NSString *resultStaitc      = [inst performSelector:@selector(myStaticMethod)];
    // call
    [MyClass myStaticMethod];
}

@end

Call 1 は正常に動作し、Call 2 は nil を返し、Call 3 はコンパイルされません。

.h ファイルで定義されていない静的メソッドを呼び出して、正しい返されたオブジェクトを与えるにはどうすればよいですか?

よろしくお願いします、ロスト

4

2 に答える 2

2

コール 2 の場合、

これはクラスメソッドであるため、次のように呼び出す必要があります

NSString *resultStaitc      = [[inst class] performSelector:@selector(myStaticMethod)];

inst はオブジェクトです。クラスメソッドを呼び出すには、クラスで呼び出す必要があります。オブジェクト インスタンスのクラスは、インスタンス自体ではなく、メソッドを呼び出すことになっています。

コール 3 の場合

正常に動作するはずです。結果の値は使用されません。コンパイル エラーの原因は

+ (NSString *)myStaticMethod;

.h で宣言されていません

使用する

NSString *resultStaitc1   =[MyClass myStaticMethod];

そして、それは値をresultStaitc1

于 2013-06-15T08:54:12.137 に答える