- (void)studyOCRefec {
ClassrefectCls =NSClassFromString(@"OCRefect");
NSLog(@"Class=%@",refectCls);
NSObject*refectObj = [[refectClsalloc]init];
OCRefect*refect = (OCRefect*)refectObj;
refect.number=100;
NSLog(@"number=%ld,Class=%@",refect.number,refect.class);
}
#pragma mark OC的反射机制类似于JAVA的反射机制,这种动态反射机制可以让OC语言更加灵活。这句话是对反射机制的初步认识,具体表现在哪里使得他类似JAVA的反射机制,又如何让OC语言更加的灵活呢?可以通过一些代码去更好的理解.总的来说,OC的反射机制主要有三个用途: 1.获得CLASS 2.检查继承关系 3.动态调用方法
- (void) ocRefect {
//1.获得CLASS
OCRefect*refect = [[OCRefectalloc]init];
[refectstudyOCRefec];
//2.检查继承关系
//去判断某个对象是否为某个类的实例对象
boolisMember = [refectisMemberOfClass:[OCRefectclass]];
//判断某个实例对象是否为某个类及其子类的实例
boolisKind = [refectisKindOfClass:[NSObjectclass]];
//判断某个实例是否实现了指定的协议
boolisConform = [refectconformsToProtocol:@protocol(NSCoding)];
//3.动态调用方法
//此处希望调用remove方法
// (1)使用 performSelector: withObject: 动态的调用move:方法(消息传递)
// [self performSelector:@selector(move:) withObject:@2];
//
// [self performSelector:NSSelectorFromString(@"move:") withObject:@10];
// (2)使用objc_msgSend 进行实现方法(为某个类对象发送消息,并返回一个值。参数1,2分别是接收消息的实例对象,要执行的方法)
// objc_msgSend(self, @selector(move:), @4);
//
// objc_msgSend(self, @selector(test:andNum:), @1, @2);
}