2020-06-12 object-C反射运用

- (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);

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。