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来替换实现,从而改变客户端的原有行为


相关文章
|
6月前
|
JavaScript Java 测试技术
基于ssm+vue.js的中学课内小说阅读与学习系统附带文章和源代码设计说明文档ppt
基于ssm+vue.js的中学课内小说阅读与学习系统附带文章和源代码设计说明文档ppt
29 1
|
6月前
|
移动开发 算法 数据可视化
🚀独立开发,做的页面不好看?我总结了一些工具与方法🚀
🚀独立开发,做的页面不好看?我总结了一些工具与方法🚀
|
6月前
奇淫技巧系列第三篇:阅读源码时基于一组快捷键让我们知道身在何方!
奇淫技巧系列第三篇:阅读源码时基于一组快捷键让我们知道身在何方!
|
6月前
|
存储 XML 缓存
前端知识笔记(三十九)———Base64图片是什么?原理是什么?优缺点是什么?
前端知识笔记(三十九)———Base64图片是什么?原理是什么?优缺点是什么?
113 0
CSS3第六课 在第五课的基础上扩展内容。本博客以实战为主。
CSS3第六课 在第五课的基础上扩展内容。本博客以实战为主。
97 0
CSS3第六课 在第五课的基础上扩展内容。本博客以实战为主。
|
设计模式 移动开发 前端开发
😲Review 实战经典:2 种封装风格,你偏爱哪种?
所以大家在后台管理系统项目中遇到的很多问题也都是相似的,代码很值得 review,本篇带来一例(真实)
|
前端开发 搜索推荐 索引
重学前端 5 # 如何运用语义类标签来呈现Wiki网页?
重学前端 5 # 如何运用语义类标签来呈现Wiki网页?
120 0
重学前端 5 # 如何运用语义类标签来呈现Wiki网页?
|
前端开发 开发者
Web前端开发笔记——第二章 HTML语言 第十一节 语义标签
Web前端开发笔记——第二章 HTML语言 第十一节 语义标签
Web前端开发笔记——第二章 HTML语言 第十一节 语义标签
|
移动开发 前端开发 HTML5
Web前端开发笔记——第二章 HTML语言 第五节 图像标签
Web前端开发笔记——第二章 HTML语言 第五节 图像标签
Web前端开发笔记——第二章 HTML语言 第五节 图像标签