zoukankan      html  css  js  c++  java
  • 2018年底,IOS面试题的复习之OC的反射机制

    明天要去面试一个公司,今天复习下IOS题目吧

    1.说一下OC的反射机制

    答:OC的反射机制类似于JAVA的反射机制,这种动态反射机制可以让OC语言更加灵活。这句话是对反射机制的初步认识,具体表现在哪里使得他类似JAVA的反射机制,又如何让OC语言更加的灵活呢?可以通过一些代码去更好的理解。总的来说,OC的反射机制主要有三个用途:

    1.获得CLASS

    2.检查继承关系

    3.动态调用方法

    先来说说第一个用途,获得class的具体用法:

    #import "Person.h"

    //1.通过字符串来获取class

    Class classname = NSClassFromString("Persong");

    NSLog(@"%@", className);

    //2.直接使用Class来创建,一般情况下我们都使用这种方法

    Person *person  = [[Person alloc] init];

    NSLog(@"%@", person);

    //然后通过实例对象去获取Class .[person class]方法

    NSLog(@"%@", [person class]);

    //3.通过类来获得Class

    NSLog(@"Person.Class = %@", [Person class])

    再来说说第二个用途,也就是检查继承关系

    //NSObject提供了一些方法可供一般对象直接调用(继承与NSObject)。

    //1.通过对象,来判断该对象的Class也就是[对象 class]方法;

    Person *person = [[Person alloc] init];

    SLog(@"[person class] =  %@", [person class]);

    //2.去判断某个对象是否为某个类的实例对象isMemberOfClass:Person

    NSLog(@"person是否是Person的实例对象:%d", [person isMemberOfClass:Person.class]);

    //3.判断某个实例对象是否为某个类及其子类的实例isKindOfClass

     NSLog(@"[person isKindOfClass:[person class]] = %d ", [person isKindOfClass:[person class]]);

    //3.判断某个实例是否实现了指定的协议

    NSLog(@"%d", [person conformsToProtocol:@protocol(UITableViewDelegate)]);

    最后说说第三个用途,动态调用方法

    //此处希望调用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);

  • 相关阅读:
    前端开发中的设计模式
    前端常见的攻击
    前端笔试题
    JavaScript中的回调地狱及解决方法
    JavaScript中的编码解码
    JavaScript中操作节点
    前端常见面试题
    Vue的使用总结(2)
    JavaScript中的事件
    Vue的使用总结(1)
  • 原文地址:https://www.cnblogs.com/howlaa/p/10133095.html
Copyright © 2011-2022 走看看