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


相关文章
|
8月前
|
前端开发 JavaScript API
如何实现两栏布局?这篇文章告诉你所有的细节!
欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚开始学习前端的读者们打造的。无论你是初学者还是有一些基础的开发者,我们都会在这里为你提供一个系统而又亲切的学习平台。我们以问答形式更新,为大家呈现精选的前端知识点和最佳实践。通过深入浅出的解释概念,并提供实际案例和练习,让你逐步建立起一个扎实的基础。无论是HTML、CSS、JavaScript还是最新的前端框架和工具,我们都将为你提供丰富的内容和实用技巧,帮助你更好地理解并运用前端开发中的各种技术。
|
8月前
|
前端开发
前端知识笔记(四)———深浅拷贝的区别,如何实现?
前端知识笔记(四)———深浅拷贝的区别,如何实现?
66 0
|
8月前
|
前端开发 JavaScript Java
COM、ActiveX与ActiveXDLL和ActiveXEXE:探索组件化开发的潜力(附图代码及关系详解)
COM、ActiveX与ActiveXDLL和ActiveXEXE:探索组件化开发的潜力(附图代码及关系详解)
|
JavaScript 前端开发 API
重学前端 23 # 狭义的文档对象DOM
重学前端 23 # 狭义的文档对象DOM
75 0
重学前端 23 # 狭义的文档对象DOM
|
设计模式 移动开发 前端开发
😲Review 实战经典:2 种封装风格,你偏爱哪种?
所以大家在后台管理系统项目中遇到的很多问题也都是相似的,代码很值得 review,本篇带来一例(真实)
|
Java 开发工具 uml
手把手教你绘制类图 | 带你学《Java面向对象编程》之七十一
类图是让人能够直观了解类的一种表现形式,本节将手把手带你使用PowerDesigner绘制类图。
手把手教你绘制类图   | 带你学《Java面向对象编程》之七十一
|
Java DataX iOS开发
熟练运用数组,看这篇就够了 | 带你学《Java面向对象编程》之十七
本节先通过几组案例与内存分析带读者了解数组在方法中传递时的内存变化,再通过求最值、均值的简单算法带读者熟悉数组的运用。
|
C#
艾伟:Silverlight 里如何实现隐式样式,ImplicitStyleManager 的实现思想
在 WPF 中,我们可以方便的在全局范围定义一个样式,就可以应用到所有这种类型的对象,这就是所谓的隐式样式(implicit Style),比如: WPF中定义样式 Button aButton b 这样之后,两个按钮就都变成了浅蓝色的背景。
979 0
|
前端开发 容器
Css规范整理:3.1、常规流布局:核心思想
(Css2.1标准中没有 明确提出,在最新的 CSS Display Module Level 3 中提出了,虽然是草案,但其中的思想与前者一脉相承) display属性定义了一个元素的显示类型,它包含元素如何生成盒的两个基本特征:
1647 0

热门文章

最新文章