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 进行规范化的指标开发管理,轻松开发指标,避免各类指标问题。
1593 0
|
2月前
|
存储 缓存 NoSQL
阿里云 Tair 联手 SGLang 共建 HiCache,构建面向“智能体式推理”的缓存新范式
针对智能体式推理对KVCache的挑战,阿里云Tair KVCache团队联合SGLang社区推出HiCache技术,通过多级存储卸载与全局共享机制,实现缓存命中率翻倍、TTFT降低56%、QPS提升2倍,构建面向长上下文、高并发、多智能体协作的下一代推理缓存基础设施。
396 27
阿里云 Tair 联手 SGLang 共建 HiCache,构建面向“智能体式推理”的缓存新范式
|
机器学习/深度学习 算法 编译器
【C++ 泛型编程 中级篇】深度解析C++:类型模板参数与非类型模板参数
【C++ 泛型编程 中级篇】深度解析C++:类型模板参数与非类型模板参数
317 0
|
移动开发 缓存 前端开发
推荐一大波让你直呼哇塞的Canvas库【值得收藏】
推荐一大波让你直呼哇塞的Canvas库【值得收藏】
6432 0
推荐一大波让你直呼哇塞的Canvas库【值得收藏】
|
存储 缓存 NoSQL
阿里云 Tair 联手 SGLang 共建 HiCache,构建面向“智能体式推理”的缓存新范式
本文系统剖析面向智能体推理的 KVCache 技术演进,针对传统机制在长上下文、多轮决策与多智能体协同中的状态膨胀、持久化缺失和缓存孤立三大瓶颈,介绍阿里云 Tair KVCache 团队联合 SGLang 社区推出的 HiCache 分层缓存体系。该方案通过显存-内存-3FS 多级卸载与全局共享,实现缓存命中率提升至80%,TTFT 降低56%,推理 QPS 翻倍,支撑智能体时代的大模型高效推理。
|
4月前
|
存储 人工智能 算法
大模型4-bit量化技术详解
本文系统阐述大语言模型的4-bit量化技术,深入解析GPTQ、AWQ等主流量化方法的原理与实现。通过详细的数学推导、代码实现和实验对比,展示4-bit量化如何将模型内存占用降低75%以上同时保持模型性能。文章涵盖量化感知训练、后训练量化、混合精度量化等关键技术,为开发者提供完整的模型压缩解决方案。
952 7
|
PyTorch 算法框架/工具
Pytorch学习笔记(四):nn.MaxPool2d()函数详解
这篇博客文章详细介绍了PyTorch中的nn.MaxPool2d()函数,包括其语法格式、参数解释和具体代码示例,旨在指导读者理解和使用这个二维最大池化函数。
1184 0
Pytorch学习笔记(四):nn.MaxPool2d()函数详解
|
机器学习/深度学习 人工智能 自然语言处理
VideoWorld:字节开源自回归视频生成模型,支持输入视频指导AI生成视频!弥补文本生成视频的短板
VideoWorld 是由字节跳动、北京交通大学和中国科学技术大学联合推出的自回归视频生成模型,能够从未标注的视频数据中学习复杂知识,支持长期推理和规划任务。
1289 8
VideoWorld:字节开源自回归视频生成模型,支持输入视频指导AI生成视频!弥补文本生成视频的短板
|
12月前
|
人工智能 自然语言处理 程序员
一文彻底搞定从0到1手把手教你本地部署大模型
Ollama 是一个开源工具,旨在简化大型语言模型(LLM)在本地环境的部署与使用。它支持多种预训练模型(如Llama 3、Phi 3等),允许用户根据设备性能选择不同规模的模型,确保高效运行。Ollama 提供了良好的数据隐私保护,所有处理均在本地完成,无需网络连接。安装简便,通过命令行即可轻松管理模型。适用于开发测试、教育研究和个人隐私敏感的内容创作场景。
4063 0
一文彻底搞定从0到1手把手教你本地部署大模型
|
人工智能 物联网 C语言
SVDQuant:MIT 推出的扩散模型后训练的量化技术,能够将模型的权重和激活值量化至4位,减少内存占用并加速推理过程
SVDQuant是由MIT研究团队推出的扩散模型后训练量化技术,通过将模型的权重和激活值量化至4位,显著减少了内存占用并加速了推理过程。该技术引入了高精度的低秩分支来吸收量化过程中的异常值,支持多种架构,并能无缝集成低秩适配器(LoRAs),为资源受限设备上的大型扩散模型部署提供了有效的解决方案。
869 5
SVDQuant:MIT 推出的扩散模型后训练的量化技术,能够将模型的权重和激活值量化至4位,减少内存占用并加速推理过程