`

Object-C的对象模型

 
阅读更多
在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语言开发的一键Json转模型搭配开源库"MJExtension"使用

    Object-C语言是一种面向对象的程序设计语言,常用于iOS和macOS应用程序的开发。在iOS开发中,经常需要将JSON数据转换为模型对象,以便更方便地处理数据。为了简化这一过程,开发者可以使用开源库"MJExtension"来实现...

    基于Object-C用于目标跟踪的全卷积暹罗网络

    传统上,任意对象跟踪的问题是通过专门在线学习对象外观模型来解决的,使用视频本身作为唯一的训练数据。尽管这些方法取得了成功,但他们仅在线的方法本质上限制了他们可以学习的模型的丰富性。最近,已经进行了几次...

    Application Framework Object Model ArcObjects对象模型图

    Application Framework Object Model ArcGISTM 8.3 Copyright © 2002 Environmental Systems Research Institute, Inc. All rights reserved. ArcGIS is a trademark of ESRI.

    基于C++实现实现YOLO目标检测算法(源码+说明文档).rar

    资源内容:基于YOLO_Multi_Object_Tracking的C++实现(完整源码+说明文档+数据).rar 代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 适用对象:工科生、数学专业、算法等方向学习者。 作者...

    深度探索C.对象模型

    本书涵盖了C++对象模型的语意暗示,并指出这个模型是如何影响你的程序的。  本书重点:探索“对象导向程序所支持的C++对象模型”下的程序行为。对于“对象导向性质之基础实现技术”以及“各种性质背后的隐含利益...

    ArcCatalog Object Model (ArcObjects对象模型图)

    ArcGISTM 8.3 Copyright © 2002 Environmental Systems Research Institute, Inc. All rights reserved. ArcCatalog and ArcGIS are trademarks of ESRI. ArcCatalog Object Model

    《深度探索C++对象模型》(Stanley B·Lippman[美] 著,侯捷 译)

    对象模型如何影响程序(How the Object Model Effects Programs) 1.2 关键词所带来的差异(A Keyword Distinction) 关键词的困扰 策略性正确的struct(The Politically Correct Struct) 1.3 对象的差异(An ...

    object-model-serializer:一个微小的C ++库,用于对象模型的“软序列化”

    对象模型序列化器 用于对象模型“软序列化”的微型 C++ 库。 #指导原则 它应该很小,因此平易近人。 它应该是非侵入性的、程序化的风格。 它应该在内部处理保存引用和循环。 它应该是“软的”,因此您可以在没有...

    COM技术内幕——微软组件对象模型--随书源代码

    该资料是《COM技术内幕——微软组件对象模型》一书的随书源代码 COM技术内幕——微软组件对象模型 基本信息 原书名: Inside COM: Microsoft's Component Object Model with Cdrom 原出版社: Microsoft Press ...

    DRForms-iOS:iOS Objective-C库,用于实现动态表单

    库提供了可定制的表单控制器(基于UITableViewController ),由于 KVO,它可以连接到表单数据模型对象。 表单字段由表格视图单元格表示。 开箱即用地定义了三种类型的表单字段: 选择 细节 文本 选择代表给定属性...

    Java面向对象编程思想

    以前总听老师说c语言是面向过程的,c++和java是面向对象的,这些糊涂老师却从来不说明何为面向过程,何为面向对象,搞得我一直对此稀里糊涂。 最近看了不少的资料,在这里总结一下对此的心得体会。 所有的计算机程序...

    什么是DOM(Document Object Model)文档对象模型

    D:document 文档 浏览器加载的页面 DOM O:object ... 文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口。它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式。我们最为关

    Cypress-POM-Ready-To-Use:赛普拉斯页面对象基本模型(准备使用)-Cypress.io的UI测试自动化设计模式

    赛普拉斯POM即用型赛普拉斯页面对象基本模型(准备使用)-Cypress.io的UI测试自动化设计模式请与我联系! 如果您有更多的想法 如何运行==>如何使用Cypress.io页面对象设计模式基本模型(准备使用) 步骤1 安装...

    Multi-Object-Tracking-in-The-Driving-Scene

    驾驶场景中的多对象跟踪。 该存储库中的代码基于。 跟踪器的C ++。 用于评估代码的Python。 示范影片 。 概述 介绍 这项工作以(Osep,2017)所做的工作为基础。 原始代码可以在这里找到。 这个想法是使跟踪器适应...

    Google Objective-C Style Guide 中文版

    Google Objective-C Style Guide 中文版 目录 例子 空格与格式 空格与制表符 行宽 方法声明与定义 方法调用 @public与@private 异常 ...Objective-C方法名 ...对象所有权 Cocoa与Objective-C特性 ...模型-视图-控制器

    appium-pageobjectmodel:使用Java + Maven + TestNG进行页面对象模型设计。 支持并行

    阿皮页面对象模型 使用Java + Maven + TestNG进行页面对象模型设计的Appium移动测试自动化框架。 框架遵循许多行业最佳实践,并在单个代码库中支持Android和iOS。 在“最高评分的Udemy”课程中,分步说明了从头开始...

    Json转换成相关模型对象

    将Json串直接转换成对应模型对象。 模型建立要求: 1,基于JsonObject对象 2,模型的属性命名 for+字段key(Json串中的字段key) 调用: Respond *respond = [[Respond alloc] initWithJson:jsonString]; //Respond...

    JavaScript对象模型-执行模型

    同上,这里的对象并不特指全局对象Object。 函数: 函数是对象的一种,实现上内部属性[[Class]]值为”Function”,表明它是函数类型,除了对象的内部属性方法外,还有 [[Construct]]、[[Call]]、[[Scope]]等内部...

    object-shapes-cvpr18:像素,体素和视图

    该存储库包含以下论文的源代码: 像素,体素和视图:用于单视图3D对象形状预测的形状表示研究大运新,查尔斯·福克斯,德里克·霍姆(Derek Hoiem) 在CVPR中,2018 项目页面安装此代码库尚未完全部署(请参阅下面的...

    JavaScript 浏览器对象模型BOM原理与常见用法实例分析

    BOM:Browser Object Model,浏览器对象模型 从上图也可以看出: window对象是BOM的顶层(核心)对象,所有对象都是通过它延伸出来的,也可以称为window的子对象。 DOM是BOM的一部分。 window对象: window对象是...

Global site tag (gtag.js) - Google Analytics