iOS runtime再学习
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再学习相关推荐
- iOS runtime 学习分享
这是团队小伙伴在内部的一次技术分享, 很开心, 我们团队越来越好了. iOS runtime 学习分享 Author:Liao Zusheng 申明: 部分资料来自于知名论坛和博客,已在文中给出相关源 ...
- iOS App Clips学习笔记
一.什么是App Clip? App Clip是一个App的轻量版,用来提供一些用户所需功能,我们可以把它看成苹果的小程序.它不需要下载就直接能打开.这样即可达到不下载完整版APP便可体验APP的部分 ...
- 黑马程序员__关于自己的一些学习死角的再学习(基于老毕的java基础视频)
----------------------<ahref="http://edu.csdn.net"target="blank">ASP.Net+A ...
- C语言再学习--关键字
如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/53021879 C语言一共有32个关键字,如下表所示: 关键字 说明 auto ...
- C语言再学习 -- 创建excel文件
参看:C语言操作Excel表格 上一篇文章讲了一下 cJSON,可以生成json文件了.这篇文章讲一下怎么生成excel表xsl格式文件. 注意点: 1.文件类型为 xls 或者 xlsx 2.使用f ...
- RTSP再学习 -- 利用FFmpeg 将 rtsp 获取H264裸流并保存到文件中
如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/78214267 既然已经可以通过 RTSP 获取h264 裸流了.那么通过 F ...
- RTSP再学习 -- Hi3516A RTSP实例 分析
上一篇文章,讲到了Hi3516A通过RTSP播放H.265视频流的源码.接下来对源码分析一下. 这里推荐一个工具,参看:日常生活小技巧 -- 文件对比工具 Beyond Compare (1)首先从 ...
- LIVE555再学习 -- FFmpeg + live555实现RTSP直播
一.简单实验 首先先简单的实验了一下. 运行 FFmpeg 将 MP4文件转成 264 文件 ffmpeg -i Tai.mp4 test.264 执行 testOnDemandRTSPServer ...
- LIVE555再学习 -- testOnDemandRTSPServer 源码分析
一.简介 先看一下官网上的介绍: testOnDemandRTSPServercreates a RTSP server that can stream, via RTP unicast, from ...
最新文章
- 二级域名session 共享方案
- 数据中心可以不设置柴发吗?
- 膨胀卷积(Dilated convolution)
- 日志规范之阿里巴巴开发手册中的其它规范讲解
- C# 读取指定目录中的所有文件,并按规则生成SQL语句!
- keras版本 str object has no attribute decode
- BizTalk Server 2010 + SQL Server 2008 R2 - 通过集成创造更大价值 [ 上篇 ]
- RN react-navigation使用
- Scala确实是门好语言
- Spring Boot中文文档
- 46. Element isEqualNode() 方法
- 【Django 2021年最新版教程14】session是什么 如何使用
- 安卓相机如何设置对焦模式
- java有用还是c有用_这周的有用资源
- hplus--H+ V2.3 (中文版)
- 基于协同过滤算法和内容推荐算法实现电影推荐系统
- centos安装nginx配置webpy
- 双硬盘双系统解决引导在同一个分区的问题
- 针对TCP连接的网络监控平台—AINA Lyzer
- 学习方法和学习经验总结
热门文章
- 学学这五招,打造自媒体短视频
- 京东 API接口:item_search - 按关键字搜索商品
- 2019东南网安考研总结
- 一摞python风格的纸牌(fluent python阅读)
- 洛谷 P2404 自然数的拆分问题(搜索、保证顺序进行搜索)
- C# 简单的颜色渐变算法
- Lenovo Y50 (1080P) 安装 黑苹果 hackintosh macOS High Sierra 10.13.5 (17F77) 不适合双系统
- 仿头条新闻资讯dz模板/Discuz新闻资讯商业版GBK模板
- 火车头采集翻页内容_火车头采集器教程:使用分页采集有分页的数据
- 搭建个人知识付费应用系统-(6)Sanity 集成