Iphone 目标C:有没有一种方法可以在没有编译器抱怨的情况下对类对象调用类方法?

Iphone 目标C:有没有一种方法可以在没有编译器抱怨的情况下对类对象调用类方法?,iphone,objective-c,ios,class,methods,Iphone,Objective C,Ios,Class,Methods,如果您有一个类对象,是否有一种方法可以使用它来调用该类的类方法。例如,如果定义了方法为+(void)foo的类A,如何在没有编译器警告无法找到方法foo的情况下实现如下示例: A* object = [[A alloc] init]; id objectClass = [object class]; [objectClass foo]; // complains that the method is not found 我只是使用我的一个类运行了一个快速测试,并且能够使用您的语法使它工作。 你

如果您有一个类对象,是否有一种方法可以使用它来调用该类的类方法。例如,如果定义了方法为
+(void)foo
的类A,如何在没有编译器警告无法找到方法foo的情况下实现如下示例:

A* object = [[A alloc] init];
id objectClass = [object class];
[objectClass foo]; // complains that the method is not found

我只是使用我的一个类运行了一个快速测试,并且能够使用您的语法使它工作。 你犯了什么错误? 顺便说一句,你基本上在做的是

  [A foo];

调用类的静态成员。这只适用于用+号标记为static的方法。

我刚刚使用我的一个类运行了一个快速测试,并且能够使用您的语法使其工作。 你犯了什么错误? 顺便说一句,你基本上在做的是

  [A foo];

调用类的静态成员。这只适用于用+号标记为static的方法。

您不必创建实例来调用类方法。如果必须调用实例方法,请创建实例

A
的方法
+(void)foo
应称为

[A foo];

您不必创建实例来调用类方法。如果必须调用实例方法,请创建实例

A
的方法
+(void)foo
应称为

[A foo];

在.h中创建类方法:

MyClass.h

@interface MyClass : NSObject {    
}
+(void) test;

@end
我的班级

@implementation MyClass

-(id) init
{
    self = [super init];

    return self;
}

+(void) test
{
    NSLog(@"Test executed");
}

@end
你可以这样称呼它:

MyClass* myClass = [[[MyClass alloc] init] autorelease];

[[myClass class] test];
编辑:

如果问题是编译器警告,只需创建一个@protocol来定义要调用的foo方法。 而不是打电话:

id objectClass = [object class]; 
试试这个

id<MyProtocol> myCastedObject = (id<MyProtocol>)object;
[myCastedObject class] foo];
id myCastedObject=(id)对象;
[myCastedObject类]foo];

在.h中创建类方法:

MyClass.h

@interface MyClass : NSObject {    
}
+(void) test;

@end
我的班级

@implementation MyClass

-(id) init
{
    self = [super init];

    return self;
}

+(void) test
{
    NSLog(@"Test executed");
}

@end
你可以这样称呼它:

MyClass* myClass = [[[MyClass alloc] init] autorelease];

[[myClass class] test];
编辑:

如果问题是编译器警告,只需创建一个@protocol来定义要调用的foo方法。 而不是打电话:

id objectClass = [object class]; 
试试这个

id<MyProtocol> myCastedObject = (id<MyProtocol>)object;
[myCastedObject class] foo];
id myCastedObject=(id)对象;
[myCastedObject类]foo];

对不起,我发得太快了。我的最终问题是如何让编译器不抱怨。请看我上面的编辑啊,当我做测试时,我使用了类名而不是objectClass,你为什么不这样做?或者只是做上面的一行?我举的例子是人为的,而不是我真正想做的。在我的实际代码中,我有一个不同类对象的数组,我必须对这些对象调用类方法,因此不能使用类名。我唯一能想到的是创建一个具有公共方法的类(假设您具有公共方法),并用当前类继承它,然后您可以作为该类访问对象?它们是类方法,而不是静态方法。对不起,我发布得太快了。我的最终问题是如何让编译器不抱怨。请看我上面的编辑啊,当我做测试时,我使用了类名而不是objectClass,你为什么不这样做?或者只是做上面的一行?我举的例子是人为的,而不是我真正想做的。在我的实际代码中,我有一个不同类对象的数组,我必须对这些对象调用类方法,因此不能使用类名。我唯一能想到的是创建一个具有公共方法的类(假设您具有公共方法),并用当前类继承它,然后可以作为该类访问对象?它们是类方法,而不是静态方法。请发布实际的接口文件(.h)、进行此调用的代码以及实际的编译器输出。这应该行得通。请确保在接口和实现中,在方法
foo
之前都有
+
。对不起,我发布得太匆忙了。请查看上面的编辑。请发布实际的接口文件(.h)、进行此调用的代码以及实际的编译器输出。这应该行得通。请确保在接口和实现中,在方法
foo
之前都有
+
。对不起,我发布得太匆忙了。请参阅上面的编辑。