Objective-C的基础数据结构
类的数据结构
Class(指针)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
typedef struct objc_class *Class; /* 这是由编译器为每一个类产生的数据结构,这个结构定义了一个类.这个结构是通过编译器在执行时产生,在执行时发送消息时使用.因此,一些成员改变了类型.编译器产生"char* const"类型的字符串指针替代了以下的成员变量"super_class"*/struct objc_class { struct objc_class* class_pointer; /* 指向元类的指针. */ struct objc_class* super_class; /* 指向父类的指针. 对于NSObject来说是NULL.*/ const char* name; /* 类的名称. */ long version; /* 未知. */ unsigned long info; /* 比特蒙板. 參考以下类的蒙板定义. */ long instance_size; /* 类的字节数.包括类的定义和全部父类的定义 */#ifdef _WIN64 long pad;#endif struct objc_ivar_list* ivars; /* 指向类中定义的实例变量的列表结构. NULL代表没有实例变量.不包含父类的变量. */ struct objc_method_list* methods; /* 链接类中定义的实例方法. */ struct sarray * dtable; /* 指向实例方法分配表. */ struct objc_class* subclass_list; /* 父类列表 */ struct objc_class* sibling_class; struct objc_protocol_list *protocols; /* 要实现的原型列表 */ void* gc_object_type;}; |
Method(指针)
|
1
2
3
4
5
6
7
8
9
10
|
typedef struct objc_method *Method; /* 编译器根据类中定义的方法为该类产生一个或很多其它这样的这样的结构. 一个类的实现能够分散在一个文件里不同部分,同一时候类别能够分散在不同的模块中.为了处理这个问题,使用一个单独的方法链表 */struct objc_method{ SEL method_name; /* 这个变量就是方法的名称.编译器使用在这里使用一个`char*`,当一个方法被注冊,名称在执行时被使用真正的SEL替代 */ const char* method_types; /* 描写叙述方法的參数列表. 在执行时注冊选择器时使用.那时候方法名就会包括方法的參数列表.*/ IMP method_imp; /* 方法运行时候的地址. */}; |
Ivar(指针)
|
1
2
3
4
5
6
7
8
9
|
typedef struct objc_ivar *Ivar; /* 编译器根据类中定义的实例变量为该类产生一个或很多其它这样的这样的结构 */struct objc_ivar{ const char* ivar_name; /* 类中定义的变量名. */ const char* ivar_type; /* 描写叙述变量的类型.调试时很实用. */ int ivar_offset; /* 实例结构的基地址偏移字节 */}; |
Category(指针)
|
1
2
3
4
5
6
7
8
9
10
11
|
typedef struct objc_category *Category; /* 编译器为每一个类别产生一个这种结构.一个类能够具有多个类别同一时候既包含实例方法,也能够包含类方法*/struct objc_category{ const char* category_name; /* 类别名.定义在类别后面的括号内*/ const char* class_name; /* 类名 */ struct objc_method_list *instance_methods; /* 链接类中定义的实例方法. NULL表示没有实例方法. */ struct objc_method_list *class_methods; /* 链接类中定义的类方法. NULL表示没有类方法. */ struct objc_protocol_list *protocols; /* 遵循的协议表 */}; |
objc_property_t
|
1
|
typedef struct objc_property *objc_property_t; |
IMP
|
1
|
id (*IMP)(id, SEL, ...) |
SEL
|
1
2
3
4
5
6
7
|
typedef struct objc_selector *SEL; struct objc_selector{ void *sel_id; const char *sel_types;}; |
objc_method_list
|
1
2
3
4
5
6
|
struct objc_method_list{ struct objc_method_list* method_next; /* 这个变量用来链接还有一个单独的方法链表 */ int method_count; /* 结构中定义的方法数量 */ struct objc_method method_list[1]; /* 可变长度的结构 */}; |
objc_cache
|
1
2
3
4
5
6
|
struct objc_cache{ unsigned int mask; unsigned int occupied; Method buckets[1];}; |
objc_protocol_list
|
1
2
3
4
5
6
|
struct objc_protocol_list{ struct objc_protocol_list *next; size_t count; struct objc_protocol *list[1];}; |
实例的数据结构
id
|
1
|
typedef struct objc_object *id; |
objc_object
|
1
2
3
4
5
|
struct objc_object{ /* 类的指针是对象相关的类.假设是一个类对象, 这个指针指向元类. Class isa;}; |
objc_super
|
1
2
3
4
5
|
struct objc_super{ id self; /* 消息的接受者 */ Class super_class; /* 接受者的父类 */}; |
版权声明:本文博主原创文章,博客,未经同意不得转载。
Objective-C的基础数据结构的更多相关文章
- 【UOJ#228】基础数据结构练习题 线段树
#228. 基础数据结构练习题 题目链接:http://uoj.ac/problem/228 Solution 这题由于有区间+操作,所以和花神还是不一样的. 花神那道题,我们可以考虑每个数最多开根几 ...
- 理解 OpenStack + Ceph (4):Ceph 的基础数据结构 [Pool, Image, Snapshot, Clone]
本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...
- hrbustoj 1551:基础数据结构——字符串2 病毒II(字符串匹配,BM算法练习)
基础数据结构——字符串2 病毒IITime Limit: 1000 MS Memory Limit: 10240 KTotal Submit: 284(138 users) Total Accepte ...
- hrbustoj 1545:基础数据结构——顺序表(2)(数据结构,顺序表的实现及基本操作,入门题)
基础数据结构——顺序表(2) Time Limit: 1000 MS Memory Limit: 10240 K Total Submit: 355(143 users) Total Accep ...
- 关于SparkMLlib的基础数据结构 Spark-MLlib-Basics
此部分主要关于MLlib的基础数据结构 1.本地向量 MLlib的本地向量主要分为两种,DenseVector和SparseVector,顾名思义,前者是用来保存稠密向量,后者是用来保存稀疏向量,其创 ...
- Vlc基础数据结构记录
1. Vlc基础数据结构 hongxianzhao@hotmail.com 1.1 基础数据结构 struct vlc_object_t,相关文件为src\misc\objects.c. 定义为: ...
- 基础数据结构之(Binary Trees)
从头开始刷ACM,真的发现过去的很多漏洞,特别越是基础的数据结构,越应该学习得精,无论是ACM竞赛,研究生考试,还是工程上,对这些基础数据结构的应用都非常多,深刻理解非常必要.不得不说最近感触还是比较 ...
- uoj #228. 基础数据结构练习题 线段树
#228. 基础数据结构练习题 统计 描述 提交 自定义测试 sylvia 是一个热爱学习的女孩子,今天她想要学习数据结构技巧. 在看了一些博客学了一些姿势后,她想要找一些数据结构题来练练手.于是她的 ...
- Redis——基础数据结构
Redis提供了5种基础数据结构,分别是String,list,set,hash和zset. 1.String Redis所有的键都是String.Redis的String是动态字符串,内部结构类似J ...
- 【UOJ228】基础数据结构练习题(线段树)
[UOJ228]基础数据结构练习题(线段树) 题面 UOJ 题解 我们来看看怎么开根? 如果区间所有值都相等怎么办? 显然可以直接开根 如果\(max-sqrt(max)=min-sqrt(min)\ ...
随机推荐
- 2018VMware虚拟机安装Mac OS 10.12.1
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 一.下载安装中所需的镜像文件以及补丁工具 Mac OS 10.12.1 Sierra (16B2555) 懒人版(下载地址):ht ...
- AspJpeg2.0组件教程完整版 aspjpeg教程...
AspJpeg是一款功能强大的基于Microsoft IIS环境的图片处理组件,网络上对其进行详细和深入介绍的中文文章并不多,即使有一般也只是牵涉到图片缩略图和图片水印,这与其为英文版本有着密切的关系 ...
- MySql开发之函数
1,在mySql常见的文本函数中常见的文本函数例如以下表所看到的: 2,数字函数例如以下: 3,日期和时间函数: 4,格式化日期和时间 使用的函数例如以下DATE_FORMAT()和TIME_FORM ...
- IOS蓝牙项目总结
常见的蓝牙标准有2.0和4.0. 特点 2.0 1.适用于数据量比较大得传输,比如音乐.语音2.IOS开发中,要求设备是经过MFI认证 4.0 1.适用于实时性比较高的数据传输,比如遥控类的鼠标. ...
- Web网站架构演变—高并发、大数据
转 Web网站架构演变—高并发.大数据 2018年07月25日 17:27:22 gis_morningsun 阅读数:599 前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系 ...
- go 保留小数若干位数
感谢 https://blog.csdn.net/sjy8207380/article/details/79013827 解决的方法 · 利用取近似值的方法解决这个问题. (1)利用fmt.Sprin ...
- C++ 指针(不论什么一个指针本身的类型都是unsigned long int型)
1.指针数组: 即 数组的元素是指针型; 例:int*pa[2]; 明明是一维的指针数组.竟当作二维数组用. [cpp] view plain copy //利用指针数组存放单位矩阵 #include ...
- 无意中发现Markdown,最终解放了我
文件夹 概述 换行 删除线 链接自己主动识别 表格 代码块高亮 定义列表 脚注 自己主动生成文件夹 參考资料 正文 概述 大部分情况下,Markdown的基本的语法已够我们使用,比方随性记录点东西.非 ...
- 驱动程序调试方法之printk——自制proc文件(一)
首先我们需要弄清楚proc机制,来看看fs/proc/proc_misc.c这个文件,从入口函数开始看: proc_misc_init(void) #ifdef CONFIG_PRIN ...
- VMware虚拟机12安装linux系统详细教程
亲测有效,附图: 工具/原料 VM ware workstation12虚拟机(百度下载) 深度linux镜像ios系统文件 链接:https://pan.baidu.com/s/1RY1Plgru4 ...