获取您拥有的实例的类对象[object class]
并向其发送消息,这正是它应该如何工作的。类也是 ObjC 中的对象,您可以将相同的消息发送到不同的类,就像您可以发送intValue
到一个NSString
或一个NSNumber
实例(或者,init
发送到(几乎)任何实例!)一样。这是 ObjC 的基础——在运行时根据消息查找方法。如果这一行:
[[object1 class] idString];
没有编译,那么你在其他地方有错误。这是完全合法的,而且你做你所描述的方式。
#import <Foundation/Foundation.h>
@interface Johnathan : NSObject
+ (NSString *)aNaughtyPhrase;
@end
@implementation Johnathan
+ (NSString *)aNaughtyPhrase
{
return @"Knickers";
}
@end
@interface Johnny : Johnathan @end
@implementation Johnny
+ (NSString *)aNaughtyPhrase
{
return @"Botty";
}
@end
@interface John : Johnathan @end
@implementation John
+ (NSString *)aNaughtyPhrase
{
return @"Woo-woo";
}
@end
@interface Jack : Johnathan @end
@implementation Jack
+ (NSString *)aNaughtyPhrase
{
return @"Semprini";
}
@end
int main(int argc, const char * argv[])
{
@autoreleasepool {
Johnathan * jt = [Johnathan new];
Johnny * jy = [Johnny new];
John * jn = [John new];
Jack * jk = [Jack new];
NSLog(@"%@", [[jt class] aNaughtyPhrase]);
NSLog(@"%@", [[jy class] aNaughtyPhrase]);
NSLog(@"%@", [[jn class] aNaughtyPhrase]);
NSLog(@"%@", [[jk class] aNaughtyPhrase]);
}
return 0;
}