前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OC-类的结构-bits

OC-类的结构-bits

原创
作者头像
Wilbur-L
修改2020-12-09 10:18:51
7070
修改2020-12-09 10:18:51
举报

类的结构

struct objc_class : objc_object{

// Class ISA 8bytes

Class superclass 8bytes

cache_t cache 16bytes

class_data_bits_t bits

````

}

但仅仅源码层面还不足以知道类的结构。那么通过在类里添加属性以及clang 编译出源c代码

clang -x objective-c -rewrite-objc -issysroot /Application````/iPhoneSimulator.sdk

得到main.cpp

static struct { //method_list_t 这是类结构之一

method_count

entsize

struct _objc_method method_list[8] //8取决于有多少个成员变量以及属性

}_OBJC_$_INSTANCE_METHODS_CLASS __attribute__ ((used,section("__DATA,__objc_const")))={

sizeof(_objc_methond),

8,

{{(struct objc_selector *"class_method such as name age date nickName","@16@0:8",(void *)_I_Person_nickName},

{{(struct objc_selector *" date","v16@0:8",(void *)_I_Person_date},

}

不难发现类的成员变量以及属性,会通过一个构造函数 struct objc_selector传入三个参数1.sel名字 2.大小 3._I_所在类的名字_变量名字 _I_CLASS_age/name/nickName/setName

@16@0:8

第一个@:返回值 id,

16代表公共字节,

第二个@代表第一个参数8大小,

0: 从零开始

那么我们通过Xcode的LLDB窗口得到Class的地址

p/x Study.class = $0

强转

p (class_data_bits_t *) $0

p $1->data() 这里开了上帝视角

(class_rw_t *)$2

p $2->methods

(const method_array_t)$3

p $3.list

p *$4

p $5.get(0)

探索止步

注释:OC里成员变量和属性的区别在于 属性底层声明时变量会增加“_”符号,以及set get方法,而成员变量没有。(我也不记得这个注释是哪里来的,莫名出现在笔记本上)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档