1.读对象模型一段文字摘抄 (唐巧高阶开发笔记)

简介: 1.读对象模型一段文字摘抄 (唐巧高阶开发笔记)

对象在内存中可以看成是一个结构体,结构体的大小并不能动态变化,所以无法给运行时动态的给对象增加成员变量

相对应的,对象的的方法定义都保存在类的可变区域中,Object-c 并且在头文件中将实现暴露出来,但是在Object-C1.0中,方法的定义列表名为methodLists的指针的指针,如下图所示.通过修改该指针指向的指针的值,就可以动态的为某一个类增加成员方法.这个就是分类的实现原理也就是为什么Category只可以为对象增加成员方法.却不成增加成员变量

相关方法

1.import rumtime相关的头文件,objc/runtime.h

2.使用objc_allocateClassPair方法创建新的类

3.使用class_addMethod方法来给类增加新的方法

4.使用objc_registerClassPair来注册新的类

5.使用objce_getClass方法来获得对象的isa的指针所指向的对象

1.类也是一个一个对象,所以它也必须是另一个类的实例这个类就是元类(metaclass)元类保存了类方法的列表,当类方法被调用时,元类会首先查找本身是否有还类方法的实现,如果没有,则该元类会向它的父类查找该方法,一直到继承链的头

元类也是一个对象,那么元类的isa指针又是指向哪里呢?所有的元类isa指针都会指向一个根元类(root

metaclass)跟元类本身的isa指针指向自己.

Class_replaceMethod替换类方法的定义

Method_exchangeImplementations交换两个方法的实现

Method_setImplementation设置一个方法的实现

Class_replaceMetod,当需要替换的方法不存在时,使用该方法

Method_exchangeImplementations交换两个方法的实现

Method_setImplementation是最简单的用法,当仅仅需要为一个方法设置其实现方式时使用

惊天大秘密runtime的使用

AFNetworking

(V1.x版本)使用了class_replaceMethod方法(AFHTTPRequestOpera-tion.m文件的105行)面试的时候把这句话说出来绝对让面试官懵逼

Nimbus是注明的工具类库,它在其core模块中提供了NIRuntimeClassModifications.h文件用于提供API的封装

国内的大众点评iOS客户端.该客户端使用了他们自己开发基于Wax修改而来的WaxPatch通过服务器更新的动态修改客户端的逻辑.而WaxPatch主要是修改了Wax中的wax_instance.m文件.在其中加入了class_replaceMethod来替换实现,从而改变客户端的原有行为


相关文章
|
数据采集 SQL 运维
巧用指标平台DataIndex,五步法轻松实现指标管理
在业务发展初期,企业需要做好规范的指标管理,以保证随着业务的不断发展,数据化决策能够成为业务强有力的支撑。本文将为大家详解如何通过袋鼠云指标管理平台DataIndex 进行规范化的指标开发管理,轻松开发指标,避免各类指标问题。
1515 0
|
机器学习/深度学习 算法 编译器
【C++ 泛型编程 中级篇】深度解析C++:类型模板参数与非类型模板参数
【C++ 泛型编程 中级篇】深度解析C++:类型模板参数与非类型模板参数
234 0
|
移动开发 缓存 前端开发
推荐一大波让你直呼哇塞的Canvas库【值得收藏】
推荐一大波让你直呼哇塞的Canvas库【值得收藏】
6153 0
推荐一大波让你直呼哇塞的Canvas库【值得收藏】
|
IDE 数据可视化 Java
5款经典代码阅读器的使用方案对比
代码阅读是技术人的必备技能之一,高效地梳理代码能够极大程度上提高开发人员的工作效率,进一步为业务创造新价值。
13124 0
5款经典代码阅读器的使用方案对比
|
PyTorch 算法框架/工具
Pytorch学习笔记(四):nn.MaxPool2d()函数详解
这篇博客文章详细介绍了PyTorch中的nn.MaxPool2d()函数,包括其语法格式、参数解释和具体代码示例,旨在指导读者理解和使用这个二维最大池化函数。
1025 0
Pytorch学习笔记(四):nn.MaxPool2d()函数详解
|
数据安全/隐私保护
常用的表单校验规则——邮箱/QQ/身份证号码/微信/电话/数字字母/整数/文本/密码等
常用的表单校验规则——邮箱/QQ/身份证号码/微信/电话/数字字母/整数/文本/密码等
260 0
|
数据安全/隐私保护 虚拟化 云计算
Win10家庭版和Win10专业版有什么区别?
Win10家庭版和Win10专业版有什么区别?
312 1
|
JSON 网络协议 API
GRPC远程调用
GRPC远程调用
546 0
|
前端开发 JavaScript 小程序
印象最深的一个bug——使用uinapp做混合开发静态图片在安卓端不显示
这几天一直在做混合开发,使用的是uni-app开发的,一套代码,多端使用,适用于各个平台。听起来很完美,使用过程不可多说,不知道是因为我们的需求变态还是我们团队两端技术水平太差。总之,开发联调过程十分痛苦,加上uniapp的调试十分困难,一度让我们两端互怼。这其中我印象最深的一个bug就是在对接联调总出现的
1665469 33
印象最深的一个bug——使用uinapp做混合开发静态图片在安卓端不显示
|
消息中间件 Java 语音技术
Python Http Server实现服务监听和地址回调
在日常第三方地址调用过程中,很多接口时异步接口,可以使用轮询的方式基于第一次请求返回的参数查询处理的结果,这种方式往往比较麻烦,特别是对一些长时间无法处理的任务,往往需要多次轮询才能获取结果。通过配置回调地址的方式来实现调用结果的监听;部分服务如阿里云MNS Topic、腾讯云的CMQ,都支持通过配置HttpEndpoint的方式实现消息的http方式订阅监听;这两种模式都是本地启动:HTTP Server,第三方服务通过已经配置的地址来请求服务,最终实现服务的监听。下面通过一个Python3 Http Server实现对:异步长文本语音合成和mns topic演示相关功能。
24565 7
Python Http Server实现服务监听和地址回调
下一篇
oss云网关配置