美文网首页
iOS相关题目-OC对象本质是一个结构体

iOS相关题目-OC对象本质是一个结构体

作者: iOS小吴 | 来源:发表于2019-07-30 15:44 被阅读0次

UIView和CALayer是啥关系?CALayer 是 QuartzCore 中的类

1. 首先UIView(继承UIResponder)可以响应事件,Layer(继承nsobject)不可以.

2. UIView是CALayer的delegate 3. UIView主要处理事件,CALayer负责绘制就更好

4. 每个 UIView 内部都有一个 CALayer 在背后提供内容的绘制和显示,并且 UIView 的尺寸样式都由内部的 Layer 所提供。两者都有树状层级结构,layer 内部有 SubLayers,View 内部有 SubViews.但是 Layer 比 View 多了个AnchorPoint

显式动画是指用户自己通过beginAnimations:context:和commitAnimations创建的动画。

隐式动画(4.0后引入)是指通过UIView的animateWithDuration:animations:方法创建的动画。

runtime机制--运行时(xcode5.0以后的)最主要的是消息机制

1:发送消息 -本质就是让对象发送消息 底层实现objc_msgSend

 objc_msgSend的执行流程可以分为3大阶段:

消息发送 ---

1在调用方法时会先判断`receiver(消息接收者)是否为空,如果为空则返回,不再往下执行;

2 如果不为空就走继承的那一套机制,通过isa去方法缓存(cache_t)的散列表中去查找又没有改方法,有就调用,没有就去class_rw_t中的方法列表中去查找,有就调用。如果不为空就走继承的那一套机制,通过isa去方法缓存(cache_t)的散列表中去查找又没有改方法,有就调用,没有就去class_rw_t中的方法列表中去查找,有就调用。

3如果本类的方法列表没有就通过superclass去父类的方法缓存和方法列表去查找,有就调用;

4:如果指定基类都找不到该方法就会开始动态的方法解析。

注意:上面在class_rw_t中查找方法,已经排序的,二分查找;没有排序的,遍历查找。

动态方法解析

1:先判断是否是原类,如果不是就会调用+(BOOL)resolveInstanceMethod:(SEL)sel方法解析实例对象方法,如果是就调用+ (BOOL)resolveClassMethod:(SEL)sel来动态解析类方法。

2:调用上面两个 方法后标记为已经动态解析了,然后将方法相关信息添加到方法列表中,然后再调用objc_msgSend即消息发送的那一套继承等机制。

3:如果动态解析后还没找到该方法实现就来到消息转发。

消息转发

1首先会调用(id)forwardingTargetForSelector:(SEL)aSelector方法(目的是将该方法转发给对应targget,就是调用对应targget对应的同名方法),这时候如果返回的是一个类或者实例对象,就会调用该类或者实例对象同名的方法(直接用该对象或类调用其对应的方法);

---------------------

2:交换方法 class_getClassMethod -》method_exchangeImplementations

3:动态添加方法resolveClassMethod--class_addMethod

4:给分类添加关联属性objc_getAssociatedObject--》objc_setAssociatedObject-objc_removeAssociatedObjects

kvo原理 实际上是创建了一个 NSKVONotifying_XXX的子类,然后用runtime的isa-swizzling技术实现。

首先会调用(id)forwardingTargetForSelector:(SEL)aSelector方法(目的是将该方法转发给对应targget,就是调用对应targget对应的同名方法),这时候如果返回的是一个类或者实例对象,就会调用该类或者实例对象同名的方法(直接用该对象或类调用其对应的方法);

---------------------

---------------------

相关文章

  • iOS相关题目-OC对象本质是一个结构体

    UIView和CALayer是啥关系?CALayer 是 QuartzCore 中的类 1. 首先UIView(继...

  • iOS基础知识(三)对象本质

    一、对象的本质: 对象:OC对象的本质是结构体,结构体内部是一个指针 1、引申:一个OC对象最少占用几个字节? 一...

  • iOS性能优化 - 耗电优化

    对象的本质 OC对象的本质是结构体,结构体内部是一个指针; 1、引申:一个OC对象最少占用几个字节? 一个指针占用...

  • OC对象的本质

    对象的本质 OC对象的本质是结构体,结构体内部是一个指针; 1、引申:一个OC对象最少占用几个字节? 一个指针占用...

  • OC中类的本质

    OC中的对象的本质 对象本身是一个含有isa指针的结构体,isa指针指向对象所属的类类的本质:类本质也是一个结构体...

  • OC对象的本质

    OC对象的本质 一个对象的本质是一个结构体,结构体里面有isa指针、成员变量等,isa指针指向对象的类别,inst...

  • 01-OC对象的本质

    OC是通过C/C++的什么数据结构实现我们的OC对象呢 结构体--OC对象的本质就是C/C++的结构体 Class...

  • iOS OC对象创建本质

    OC的类本质是一个结构体通过对main.m转换main.cpp可以看出,类对象的本质就是一个结构体。 对象创建本质...

  • OC对象的本质

    1、OC对象的本质 OC对象就是一个结构体,结构体中包含了一个isa指针,系统给对象分配得内存空间最小是16个字节...

  • iOS底层学习 - isa指针的底层实现

    本文的主要目的是理解isa指针相关的一些知识。 我们都知道oc对象的本质是一个结构体,想要更好的了解这个结构体,我...

网友评论

      本文标题:iOS相关题目-OC对象本质是一个结构体

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