iOS面试专题一
几乎是默写出来,加上自己理解的博客(iOS面试)

持续更新中。。。

问题:当方法转发到另一个类的对象的时候,另一个类没有对应的属性怎么办,会崩溃吗?

文章目录

  • 1.基础数据结构
  • 2.对象,类对象,元类对象
  • 3.消息传递,方法查找
  • 4.消息转发,动态方法解析
  • 5.runtime的使用
  • 运行时runtime
  • 编译:将高级语言翻译成计算机能听懂的二进制语言
  • 运行:计算机开始执行这些二进制语言所记录的内容

oc是一门动态语言,它将尽可能多的决策从编译时和链接时推迟到运行时。这意味着它不仅需要一个编译器,还需要一个运行时系统来执行编译后的代码,也就是runtime

Messaging(消息机制):消息传递,方法查找

  • 消息(方法声明)直到运行时才绑定到方法实现。编译器将消息表达式转换为对消息传递函数objc_msgSend的调用。这个函数接收消息中提到的接收方和方法的名称(方法选择器)作为它的两个主要参数,消息中传递的任何参数也会传递给objc_msgSend

消息传递函数objc_msgSend完成动态绑定所需的一切

  • 找到IMP --> 调用IMP --> 返回返回值
  • 一个类分派表。这个表中有一些条目,它们将方法选择器与它们所标识的方法的特定于类的地址相关联

消息转发,动态方法解析

  • resoleveInstanceMethode
  • forwardingTargetForSelector
  • methodSignatureForSelector, forwardInvacation

runtime使得闭源的iOS变为开源,获取系统类的私有属性,方法和成员变量。用kvc赋值,用runtime调用方法

  • oc的方法调用,实际上就是给对象发消息
  • 在运行时选择方法的实现 – 方法(IMP)被动态地绑定到消息(SEL)

1.基础数据结构

  • cache_t
  • bucket_t:key(SEL),IMP
  • 用于快速查找方法执行函数
  • 是可增量扩展的哈希表结构
  • 是局部性原理的最佳应用
  • class_rw_t - methods: 二维数组,一个类可能有多个分类。 readwrite
  • class-ro_t - methods: 一维数组,readonly
  • isa指针 指针型:isa的值代表Class的地址。 非指针型:isa的值的部分代表Class的地址
  • method_t 函数四要素:名称(SEL),参数,返回值,函数体(IMP)
  • Type Encodings V-void @-id : - SEL

2.对象,类对象,元类对象

  • 类对象存储实例方法列表等信息
  • 元类对象存储类方法列表等信息
  • 根元类对象的父类是根类,所有NSObject类对象可以调用实例对象的方法

3.消息传递,方法查找

  • objc_msgSend(id self, SEL _cmd), 消息传递转化为了函数调用
  • [super class]:objc_msgSendSuper(super,@selector(class)), 从父类的方法列表开始寻找,返回的还是self的类对象,是向self发消息
  • 消息的传递过程(机制)

4.消息转发,动态方法解析

  • 动态方法解析(Dynamic Method Resolution)
  • resolveInstanceMethod:动态添加方法的实现
  • 消息转发(Message Forwarding):转发到其他对象的同名方法
  • forwardingTargetForSelector(Fast forwarding):转发给别的对象去实现
  • Normal forwarding:可以转发到本对象的其他方法,也可以转发到其他的对象的其他方法
  • methodSignatureForSelector: 方法签名
  • forwardInvocation: 方法实现(调用)

  • Method-Swizzling

5.runtime的使用

  • 可以使得闭源的iOS变为开源,获取系统类的私有属性,方法和成员变量。用kvc赋值

iOS runtime 动态拦截方法,设置参数 tableView改变索引栏的字体大小和颜色

iOS runtime再学习相关推荐

  1. iOS runtime 学习分享

    这是团队小伙伴在内部的一次技术分享, 很开心, 我们团队越来越好了. iOS runtime 学习分享 Author:Liao Zusheng 申明: 部分资料来自于知名论坛和博客,已在文中给出相关源 ...

  2. iOS App Clips学习笔记

    一.什么是App Clip? App Clip是一个App的轻量版,用来提供一些用户所需功能,我们可以把它看成苹果的小程序.它不需要下载就直接能打开.这样即可达到不下载完整版APP便可体验APP的部分 ...

  3. 黑马程序员__关于自己的一些学习死角的再学习(基于老毕的java基础视频)

    ----------------------<ahref="http://edu.csdn.net"target="blank">ASP.Net+A ...

  4. C语言再学习--关键字

    如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/53021879 C语言一共有32个关键字,如下表所示: 关键字 说明 auto ...

  5. C语言再学习 -- 创建excel文件

    参看:C语言操作Excel表格 上一篇文章讲了一下 cJSON,可以生成json文件了.这篇文章讲一下怎么生成excel表xsl格式文件. 注意点: 1.文件类型为 xls 或者 xlsx 2.使用f ...

  6. RTSP再学习 -- 利用FFmpeg 将 rtsp 获取H264裸流并保存到文件中

    如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/78214267 既然已经可以通过 RTSP 获取h264 裸流了.那么通过 F ...

  7. RTSP再学习 -- Hi3516A RTSP实例 分析

    上一篇文章,讲到了Hi3516A通过RTSP播放H.265视频流的源码.接下来对源码分析一下. 这里推荐一个工具,参看:日常生活小技巧 -- 文件对比工具 Beyond Compare (1)首先从 ...

  8. LIVE555再学习 -- FFmpeg + live555实现RTSP直播

    一.简单实验 首先先简单的实验了一下. 运行 FFmpeg 将 MP4文件转成 264 文件 ffmpeg -i Tai.mp4 test.264 执行 testOnDemandRTSPServer ...

  9. LIVE555再学习 -- testOnDemandRTSPServer 源码分析

    一.简介 先看一下官网上的介绍: testOnDemandRTSPServercreates a RTSP server that can stream, via RTP unicast, from ...

最新文章

  1. 二级域名session 共享方案
  2. 数据中心可以不设置柴发吗?
  3. 膨胀卷积(Dilated convolution)
  4. 日志规范之阿里巴巴开发手册中的其它规范讲解
  5. C# 读取指定目录中的所有文件,并按规则生成SQL语句!
  6. keras版本 str object has no attribute decode
  7. BizTalk Server 2010 + SQL Server 2008 R2 - 通过集成创造更大价值 [ 上篇 ]
  8. RN react-navigation使用
  9. Scala确实是门好语言
  10. Spring Boot中文文档
  11. 46. Element isEqualNode() 方法
  12. 【Django 2021年最新版教程14】session是什么 如何使用
  13. 安卓相机如何设置对焦模式
  14. java有用还是c有用_这周的有用资源
  15. hplus--H+ V2.3 (中文版)
  16. 基于协同过滤算法和内容推荐算法实现电影推荐系统
  17. centos安装nginx配置webpy
  18. 双硬盘双系统解决引导在同一个分区的问题
  19. 针对TCP连接的网络监控平台—AINA Lyzer
  20. 学习方法和学习经验总结

热门文章

  1. 学学这五招,打造自媒体短视频
  2. 京东 API接口:item_search - 按关键字搜索商品
  3. 2019东南网安考研总结
  4. 一摞python风格的纸牌(fluent python阅读)
  5. 洛谷 P2404 自然数的拆分问题(搜索、保证顺序进行搜索)
  6. C# 简单的颜色渐变算法
  7. Lenovo Y50 (1080P) 安装 黑苹果 hackintosh macOS High Sierra 10.13.5 (17F77) 不适合双系统
  8. 仿头条新闻资讯dz模板/Discuz新闻资讯商业版GBK模板
  9. 火车头采集翻页内容_火车头采集器教程:使用分页采集有分页的数据
  10. 搭建个人知识付费应用系统-(6)Sanity 集成