美文网首页iOS面试题
这就是所谓的OC的反射机制

这就是所谓的OC的反射机制

作者: 商鞅福泽谕吉 | 来源:发表于2018-07-31 16:47 被阅读4次

笔者自语:隐隐约约的记得有次面试的时候面试官问到了:说一下oc的反射机制。我一脸懵逼的样子,什么是oc的反射机制呀,开发过程中听都听说过,怎么说呢?相信你也遇到过类似的境况,恨不得找一个地缝钻进去,我现在只说一句:其实就那个样子,没啥神秘的!


反射机制的基本概念:

找了好久oc的反射机制,只能朦胧的得到一句:跟java的反射机制相似

那么笔者就先贴上java语言的反射机制基本概念:在运行状态下,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能调用它的任意一个方法,这种动态获取信息,以及动态调用对象方法的功能叫java语言的反射机制;

那么oc语言的反射机制与之类似是什么样的呢:在oc语言的反射机制跟java反射机制很相似,在oc中所有oc对象都继承NSObject类,这个类为我们提供了基础的方法和协议,我们可以直接调用这个类继承过来的方法,这个对象的基本信息,这大概就是oc语言的反射机制;

现在基本有了反射机制的概念,我们平时开发过程中都怎么利用这种机制呢?

反射机制的运用

1.获取Class对象

Class对象其实本质上是一个结构体,这个结构体的成员变量还是他自己。

typedef struct objc_class *Class;
struct objc_class {
    Class isa  OBJC_ISA_AVAILABILITY;                                  
}

在开发过程中难免会碰到要判断两个对象是否同属一个类,我们可以调用他们的Class方法获取类对象比如:

// 在实例方法中通过self调用class实例方法获取类对象
[self class]
// 通过ViewController类直接调用class类方法获取类对象
[ViewController class]
// 在类方法中使用类对象调用class方法获取类对象
+ (Class)classMethod {
    return [self class];
}

2.利用反射方法

系统Foundation框架为我们提供了一些方法反射的API,由于oc语言的动态性,这些操作可以发生在运行时的。

// SEL和字符串转换
FOUNDATION_EXPORT NSString *NSStringFromSelector(SEL aSelector);
FOUNDATION_EXPORT SEL NSSelectorFromString(NSString *aSelectorName);
// Class和字符串转换
FOUNDATION_EXPORT NSString *NSStringFromClass(Class aClass);
FOUNDATION_EXPORT Class __nullable NSClassFromString(NSString *aClassName);
// Protocol和字符串转换
FOUNDATION_EXPORT NSString *NSStringFromProtocol(Protocol *proto) NS_AVAILABLE(10_5, 2_0);
FOUNDATION_EXPORT Protocol * __nullable NSProtocolFromString(NSString *namestr) NS_AVAILABLE(10_5, 2_0);

通过以上方法,我们可以将字符串与同名的oc对象动态的相互转化;

3.常用判断方法

在NSObject类中我们提供一些基础方法,用来做一些判断操作,这些方法都是发生在运行时动态判断的。

// 当前对象是否这个类或其子类的实例
- (BOOL)isKindOfClass:(Class)aClass;
// 当前对象是否是这个类的实例
- (BOOL)isMemberOfClass:(Class)aClass;
// 当前对象是否遵守这个协议
- (BOOL)conformsToProtocol:(Protocol *)aProtocol;
// 当前对象是否实现这个方法
- (BOOL)respondsToSelector:(SEL)aSelector;

利用这些判断方法,可以动态的判断一个对象是否有符合一些条件;例如是否是某个类是否是某个类的实例等。

相关文章

  • 这就是所谓的OC的反射机制

    笔者自语:隐隐约约的记得有次面试的时候面试官问到了:说一下oc的反射机制。我一脸懵逼的样子,什么是oc的反射机制呀...

  • Effective-OC读书笔记(1)

    针对于这几天在读effective-oc相关书籍,笔者基于OC基础做一些总结 1、反射机制 OC中的反射机制 体现...

  • iOS面试题

    1、说一下OC的反射机制; OC 的反射机制以及使用场景 2、block的实质是什么?有几种block?分别是怎样...

  • 问题大全

    1.说一下OC的反射机制 所有的oc 对象都是继承于nsobject nsobject 提供了如下反射方法反射方...

  • OC的反射机制

    概念 反射机制是指程序可以访问、检测和修改它本身状态或行为的一种能力。在OC中是可以去动态访问,检查,修改的方法就...

  • OC的反射机制

    Class反射 // 通过类名的字符串形式实例化对象 Class class = NSSClassFromStri...

  • OC的反射机制

    目录 1 反射机制的概念 2 反射机制原理 首先还是按照惯例和大家解释下什么反射机制? 反射的概念是由Smith在...

  • OC的反射机制

    Objective-C语言中的OC对象,都继承自NSObject类。这个类为我们提供了一些基础的方法和协议,我们可...

  • OC的反射机制

    运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动...

  • 【转载】objc反射机制

    反射机制的基本概念: 找了好久oc的反射机制,只能朦胧的得到一句:跟java的反射机制相似 那么笔者就先贴上jav...

网友评论

    本文标题:这就是所谓的OC的反射机制

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