所有しているインスタンスのクラスオブジェクトを取得し、[object class]
それにメッセージを送信することは、まさにこれが機能することになっている方法です。intValue
クラスはObjCでもオブジェクトであり、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;
}