1、直接通过Object-C源代码
2、通过NSObject中定义的方法:
isKindOfClass
isMemberOfClass
responseToSelector:判断该实例是否调用指定方法
3、直接调用运行时函数进行动态编程
#import
<Foundation/Foundation.h>
#import "DCApple.h"
int main( int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog ( @"Hello, World!" );
// 通过字符串来获取 Class
Class clazz = NSClassFromString ( @"NSDate" );
NSLog ( @"%@" , clazz);
// 直接使用 Class 来创建对象
id date = [[clazz alloc ] init ];
NSLog ( @"%@" , date);
// 通过对象来获取 Class
NSLog ( @"%@" , [date class ]);
// 通过类来获取 class
NSLog ( @"%d" , clazz == NSDate . class );
}
return 0 ;
}
#import "DCApple.h"
int main( int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog ( @"Hello, World!" );
// 通过字符串来获取 Class
Class clazz = NSClassFromString ( @"NSDate" );
NSLog ( @"%@" , clazz);
// 直接使用 Class 来创建对象
id date = [[clazz alloc ] init ];
NSLog ( @"%@" , date);
// 通过对象来获取 Class
NSLog ( @"%@" , [date class ]);
// 通过类来获取 class
NSLog ( @"%d" , clazz == NSDate . class );
}
return 0 ;
}
===>>
2014-12-01 09:06:25.916 reflection[1179:303] Hello, World!
2014-12-01 09:06:25.917 reflection[1179:303] NSDate
2014-12-01 09:06:25.924 reflection[1179:303] 2014-12-01 01:06:25 +0000
2014-12-01 09:06:25.925 reflection[1179:303] __NSDate
2014-12-01 09:06:25.925 reflection[1179:303] 1
2014-12-01 09:06:25.917 reflection[1179:303] NSDate
2014-12-01 09:06:25.924 reflection[1179:303] 2014-12-01 01:06:25 +0000
2014-12-01 09:06:25.925 reflection[1179:303] __NSDate
2014-12-01 09:06:25.925 reflection[1179:303] 1
Program ended with exit code: 0
检查继承关系
conformsToProtocol:传入一个Protocol 参数,用于判断该类及其子类的实例。
//
// main.m
// reflection
//
// Created by mac on 14-12-1.
// Copyright (c) 2014 年 mac. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "DCApple.h"
int main( int argc, const char * argv[]) {
// reflection
//
// Created by mac on 14-12-1.
// Copyright (c) 2014 年 mac. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "DCApple.h"
int main( int argc, const char * argv[]) {
@autoreleasepool {
//
判断对象是否为某个类及其子类的实例
NSLog ( @"app 是否为 DCApple 及其子类的实例: %d" ,
[app isKindOfClass : DCApple . class ]);
NSLog ( @"app 是否为 NSObject 及其子类的实例: %d" ,
[app isKindOfClass : NSObject . class ]);
NSLog ( @"app2 是否为 DCApple 及其子类的实例: %d" ,
[app2 isKindOfClass : DCApple . class ]);
NSLog ( @"app2 是否为 NSObject 及其子类的实例: %d" ,
[app2 isKindOfClass : NSObject . class ]);
// 判断对象是否实现了指定协议
NSLog ( @"app 是否实现 DCEatable 协议: %d" ,
[app conformsToProtocol : @protocol ( DCEatable )]);
NSLog ( @"app2 是否实现了 DCEatable 协议: %d" ,[app2 conformsToProtocol : @protocol ( DCEatable )]);
}
return 0 ;
NSLog ( @"app 是否为 DCApple 及其子类的实例: %d" ,
[app isKindOfClass : DCApple . class ]);
NSLog ( @"app 是否为 NSObject 及其子类的实例: %d" ,
[app isKindOfClass : NSObject . class ]);
NSLog ( @"app2 是否为 DCApple 及其子类的实例: %d" ,
[app2 isKindOfClass : DCApple . class ]);
NSLog ( @"app2 是否为 NSObject 及其子类的实例: %d" ,
[app2 isKindOfClass : NSObject . class ]);
// 判断对象是否实现了指定协议
NSLog ( @"app 是否实现 DCEatable 协议: %d" ,
[app conformsToProtocol : @protocol ( DCEatable )]);
NSLog ( @"app2 是否实现了 DCEatable 协议: %d" ,[app2 conformsToProtocol : @protocol ( DCEatable )]);
}
return 0 ;
}
=====>>
2014-12-01 14:07:26.220 reflection[2195:303] DCApple
2014-12-01 14:07:26.220 reflection[2195:303] DCApple1
2014-12-01 14:07:26.221 reflection[2195:303] app 是否为 DCApple 的实例: 1
2014-12-01 14:07:26.221 reflection[2195:303] app 是否为 NSObject 的实例: 0
2014-12-01 14:07:26.222 reflection[2195:303] app2 是否为 NSObject 的实例: 0
2014-12-01 14:07:26.222 reflection[2195:303] app2 是否为 DCApple 的实例: 0
2014-12-01 14:07:26.223 reflection[2195:303] app2 是否为 DCApple 的实例: 1
2014-12-01 14:07:26.223 reflection[2195:303] app 是否为 DCApple 及其子类的实例: 1
2014-12-01 14:07:26.224 reflection[2195:303] app 是否为 NSObject 及其子类的实例: 1
2014-12-01 14:07:26.224 reflection[2195:303] app2 是否为 DCApple 及其子类的实例: 1
2014-12-01 14:07:26.225 reflection[2195:303] app2 是否为 NSObject 及其子类的实例: 1
2014-12-01 14:07:26.225 reflection[2195:303] app 是否实现 DCEatable 协议: 1
2014-12-01 14:07:26.225 reflection[2195:303] app2 是否实现了 DCEatable 协议: 1
2014-12-01 14:07:26.220 reflection[2195:303] DCApple1
2014-12-01 14:07:26.221 reflection[2195:303] app 是否为 DCApple 的实例: 1
2014-12-01 14:07:26.221 reflection[2195:303] app 是否为 NSObject 的实例: 0
2014-12-01 14:07:26.222 reflection[2195:303] app2 是否为 NSObject 的实例: 0
2014-12-01 14:07:26.222 reflection[2195:303] app2 是否为 DCApple 的实例: 0
2014-12-01 14:07:26.223 reflection[2195:303] app2 是否为 DCApple 的实例: 1
2014-12-01 14:07:26.223 reflection[2195:303] app 是否为 DCApple 及其子类的实例: 1
2014-12-01 14:07:26.224 reflection[2195:303] app 是否为 NSObject 及其子类的实例: 1
2014-12-01 14:07:26.224 reflection[2195:303] app2 是否为 DCApple 及其子类的实例: 1
2014-12-01 14:07:26.225 reflection[2195:303] app2 是否为 NSObject 及其子类的实例: 1
2014-12-01 14:07:26.225 reflection[2195:303] app 是否实现 DCEatable 协议: 1
2014-12-01 14:07:26.225 reflection[2195:303] app2 是否实现了 DCEatable 协议: 1
Program ended with exit code: 0