美文网首页
OC的反射机制

OC的反射机制

作者: 紫云夕月 | 来源:发表于2019-05-18 09:29 被阅读0次

    运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的以及动态调用对象的方法的功能就是反射机制.

    动态的运行状态下我们可以构造任意一个类,然后我们通过这个类知道这个类的所有属性和方法,并且如果我们创建一个对象,我们也可以通过对象找到这个类的任意一个方法,这就是反射机制

    (大部分的动态反射支持来自NSObject 类。NSObject是所有类(除了一些很少见的例外)的根类。所以基本常用到的类应该都可以支持反射)

    获得class

    通过类名的字符串形式实例化对象(这里我拿在项目当中创建的person类进行实验,下面方式属于C语言方法)

      Class class="NSClassFormString"(@"person");

      person *tea=[[class alloc] init];

    通过类名来生成相应类的实例

    NSString *str = NSStringFormClass(class);

      Class * tempClass = NSClassFromString(str);

    这里 在创建这个类实例之前 最好判断下 是否该对象存在;

    if(!tempClass) return;

    // 如果存在 就创建你相应的实例对象 比如上面我们这个类名 是UIViewController子类的类名 UIViewController * tempObj = [[tempClass alloc] init];

    方法的优势:

    1、代码更安全,程序在编译阶段就可以检测需要访问的Class对象是否存在

    2、程序性能高,因为这个方式无须调用方法。

    检查继承关系

    如果程序只是需要确认一个类的继承关系,可以直接调用NSObject提供的方式来进行判断。

    1、isKindOfClass:需要传入一个Class参数,用于判断该对象是否为该类及其子类的实例

    2、isMemberOfClass:需要传入一个Class参数,用于判断该对象是否为该类的实例

    3、conformsToProtocol:需要传入一个Protocol参数,用于判断该对象是否为该类及其子类的实例(该方法中需要传入一个Protocol参数,在程序中有两种方法可以获得:①oc提供的@protocol指令来实现;②调用Protocol *NSProtocolFromString(NSString *namestr);方法根据协议名字符串来获取对应的协议)

    相关文章

      网友评论

          本文标题:OC的反射机制

          本文链接:https://www.haomeiwen.com/subject/tuuzaqtx.html