在Object-C的类型结构中,有几个比较重要的概念Object(实例),Class(类),Metaclass(元类),Rootclass(根类),Rootclass‘s metaclass(根元类)。有面向对象编程语言背景的同学可以很容易理解类和实例。在Object-C中,Object本质上是一个struct,在这个struct中会保存一个名为isa的指针,该指针会指向该Object的类。如下:
typedef struct objc_object {
Class isa;
} *id;
Object的类中保存了该Object实现的所有方法(即实例方法),另外还有类中还保存了父类的指针,这样Object的方法调用过程可以描述如下:
- 1. 会根据isa找到类,
- 2. 从类中寻找方法,
- 3. 找到的话,直接执行。
- 4. 没找到的话,继续沿着父类的指针往上找,直到找到为止。
- 5. 最后都没找到,则报错。
在Object-C中,类同样是一个Object,类实例同样有自己的isa,这就是元类。元类中保存了所有的类方法和父元类的指针。现在我们知道,对象是类的实例,类是元类的实例,那么元类呢? 元类是根元类的实例,根元类呢? 根元类是自己的实例,循环到此收尾。这就是整个Object-C语言的寻类过程。
那么,继承关系呢?Object-C中类的继承和元类的继承是并行的,如果类之间继承了,那么他们的元类也就继承了,直到根元类,根元类的父类是根类。这就是整个Object-C的对象模型。
- 大小: 199.1 KB
分享到:
相关推荐
Object-C语言是一种面向对象的程序设计语言,常用于iOS和macOS应用程序的开发。在iOS开发中,经常需要将JSON数据转换为模型对象,以便更方便地处理数据。为了简化这一过程,开发者可以使用开源库"MJExtension"来实现...
传统上,任意对象跟踪的问题是通过专门在线学习对象外观模型来解决的,使用视频本身作为唯一的训练数据。尽管这些方法取得了成功,但他们仅在线的方法本质上限制了他们可以学习的模型的丰富性。最近,已经进行了几次...
Application Framework Object Model ArcGISTM 8.3 Copyright © 2002 Environmental Systems Research Institute, Inc. All rights reserved. ArcGIS is a trademark of ESRI.
资源内容:基于YOLO_Multi_Object_Tracking的C++实现(完整源码+说明文档+数据).rar 代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 适用对象:工科生、数学专业、算法等方向学习者。 作者...
本书涵盖了C++对象模型的语意暗示,并指出这个模型是如何影响你的程序的。 本书重点:探索“对象导向程序所支持的C++对象模型”下的程序行为。对于“对象导向性质之基础实现技术”以及“各种性质背后的隐含利益...
ArcGISTM 8.3 Copyright © 2002 Environmental Systems Research Institute, Inc. All rights reserved. ArcCatalog and ArcGIS are trademarks of ESRI. ArcCatalog Object Model
对象模型如何影响程序(How the Object Model Effects Programs) 1.2 关键词所带来的差异(A Keyword Distinction) 关键词的困扰 策略性正确的struct(The Politically Correct Struct) 1.3 对象的差异(An ...
对象模型序列化器 用于对象模型“软序列化”的微型 C++ 库。 #指导原则 它应该很小,因此平易近人。 它应该是非侵入性的、程序化的风格。 它应该在内部处理保存引用和循环。 它应该是“软的”,因此您可以在没有...
该资料是《COM技术内幕——微软组件对象模型》一书的随书源代码 COM技术内幕——微软组件对象模型 基本信息 原书名: Inside COM: Microsoft's Component Object Model with Cdrom 原出版社: Microsoft Press ...
库提供了可定制的表单控制器(基于UITableViewController ),由于 KVO,它可以连接到表单数据模型对象。 表单字段由表格视图单元格表示。 开箱即用地定义了三种类型的表单字段: 选择 细节 文本 选择代表给定属性...
以前总听老师说c语言是面向过程的,c++和java是面向对象的,这些糊涂老师却从来不说明何为面向过程,何为面向对象,搞得我一直对此稀里糊涂。 最近看了不少的资料,在这里总结一下对此的心得体会。 所有的计算机程序...
D:document 文档 浏览器加载的页面 DOM O:object ... 文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口。它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式。我们最为关
赛普拉斯POM即用型赛普拉斯页面对象基本模型(准备使用)-Cypress.io的UI测试自动化设计模式请与我联系! 如果您有更多的想法 如何运行==>如何使用Cypress.io页面对象设计模式基本模型(准备使用) 步骤1 安装...
驾驶场景中的多对象跟踪。 该存储库中的代码基于。 跟踪器的C ++。 用于评估代码的Python。 示范影片 。 概述 介绍 这项工作以(Osep,2017)所做的工作为基础。 原始代码可以在这里找到。 这个想法是使跟踪器适应...
Google Objective-C Style Guide 中文版 目录 例子 空格与格式 空格与制表符 行宽 方法声明与定义 方法调用 @public与@private 异常 ...Objective-C方法名 ...对象所有权 Cocoa与Objective-C特性 ...模型-视图-控制器
阿皮页面对象模型 使用Java + Maven + TestNG进行页面对象模型设计的Appium移动测试自动化框架。 框架遵循许多行业最佳实践,并在单个代码库中支持Android和iOS。 在“最高评分的Udemy”课程中,分步说明了从头开始...
将Json串直接转换成对应模型对象。 模型建立要求: 1,基于JsonObject对象 2,模型的属性命名 for+字段key(Json串中的字段key) 调用: Respond *respond = [[Respond alloc] initWithJson:jsonString]; //Respond...
同上,这里的对象并不特指全局对象Object。 函数: 函数是对象的一种,实现上内部属性[[Class]]值为”Function”,表明它是函数类型,除了对象的内部属性方法外,还有 [[Construct]]、[[Call]]、[[Scope]]等内部...
该存储库包含以下论文的源代码: 像素,体素和视图:用于单视图3D对象形状预测的形状表示研究大运新,查尔斯·福克斯,德里克·霍姆(Derek Hoiem) 在CVPR中,2018 项目页面安装此代码库尚未完全部署(请参阅下面的...
BOM:Browser Object Model,浏览器对象模型 从上图也可以看出: window对象是BOM的顶层(核心)对象,所有对象都是通过它延伸出来的,也可以称为window的子对象。 DOM是BOM的一部分。 window对象: window对象是...