NSObject 类的反射,方法反射用法如下:
#import "MS_NSReflect.h"
#import "MS_Person.h"
#import "MS_Student.h"
@implementation MS_NSReflect
-(void)showNSReflect
{
//子类 与 基类 的比较 (isKindOfClass)返回值(true)
//基类 与 子类 的比较 (isKindOfClass) 返回值(false)
id student = [[MS_Student alloc] init];
if([student isKindOfClass:[MS_Person class]])
{
NSLog(@"This is Student isKindOfClass Person");
}
else
{
NSLog(@"This is Student is NOT KindOfClass Person");
}
//基类 isKindOfClass 子类
id person = [[MS_Person alloc] init];
if([person isKindOfClass:[MS_Student class]])
{
NSLog(@"This isPerson isKindOfClass Student");
}
else
{
NSLog(@"This isPerson is NOT KindOfClass Student");
}
//同一类别的实例 isMemberOfClass 基类/或其它类 返回(false)
//同一类别的实例 isMemberOfClass 该一类别 返回(true)
id student_temp = [[MS_Student alloc] init];
if([student_temp isMemberOfClass:[MS_Person class]])
{
NSLog(@"This Student isMemberOfClass Person");
}
else
{
NSLog(@"This Student is NOT MemberOfClass Person");
}
//同一类别的判断 返回(true)
id person_temp = [[MS_Person alloc] init];
if([person_temp isMemberOfClass:[MS_Person class]])
{
NSLog(@"This Person isMemberOfClass Person");
}
else
{
NSLog(@"This Person is NOT MemberOfClass Person");
}
//NSObject 的反射
//类名反射
NSString *classPerson = @"MS_Person";
Class singlePersonClass = NSClassFromString(classPerson);
MS_Person *personReflect = [[singlePersonClass alloc] init];
personReflect.person = @"张三";
[personReflect showPerson];
//方法反射 可以反射私有方法
NSString *methodPerson = @"showPrivate";
SEL singlePersonMethod = NSSelectorFromString(methodPerson);
[personReflect performSelector:singlePersonMethod];
}
@end