探究Class本质
比较简单,只是记录一下知识点。
一、 Class
1.网上扣了一张图片:
文章图片
image.png Class 的一个结构。
关于为什么&FAST_DATA_MASK
是一种计算位域方法,取出对应位域的值,具体可以看之前写的一篇探究 isa 本质
。
2.class_rw_t 真实定义:
class_rw_t
:读写、运行时调用方法都是取之于此、类的初始内容、分类的内容。
struct class_rw_t {
// Be warned that Symbolication knows the layout of this structure.
uint32_t flags;
uint32_t version;
const class_ro_t *ro;
method_array_t methods;
property_array_t properties;
protocol_array_t protocols;
Class firstSubclass;
Class nextSiblingClass;
};
class method_array_t :
public list_array_tt
{
typedef list_array_tt Super;
public:
method_list_t **beginCategoryMethodLists() {
return beginLists();
}method_list_t **endCategoryMethodLists(Class cls);
method_array_t duplicate() {
return Super::duplicate();
}
};
method_array_t
->method_list_t
->method_t
3.class_ro_t 真实定义:
class_ro_t
:只读、包含的是类的初始内容。struct class_ro_t {
uint32_t flags;
uint32_t instanceStart;
uint32_t instanceSize;
#ifdef __LP64__
uint32_t reserved;
#endifconst uint8_t * ivarLayout;
const char * name;
method_list_t * baseMethodList;
protocol_list_t * baseProtocols;
const ivar_list_t * ivars;
const uint8_t * weakIvarLayout;
property_list_t *baseProperties;
method_list_t *baseMethods() const {
return baseMethodList;
}
};
method_list_t
-> method_t
4.
method_t
真实定义:struct method_t {
SEL name;
const char *types;
IMP imp;
};
SEL name
:方法名字,方法选择器const char *types
:方法类型,字符串表示,方法编码IMP imp
:函数指针,函数实现地址【探究Class本质】5.
Type Encoding
iOS中提供了一种@encode的指令,可以将具体类型用字符串表示出来。
文章图片
文章图片
image.png
NSLog(@"%s",@encode(id));
2018-09-03 11:51:37.186767+0800 runtime[1030:38253] @
推荐阅读
- 136.|136. Single Number
- unity探究UGUI的Image中sprite和overrideSprite的区别
- 浅谈教育与医学之本质和医学生培养之三观
- 社交本质是什么
- Objective-c
- 人际关系的本质
- 生命致简|还原生命的本质及认知生命的极限
- 【Tomcat源码阅读分享】—(5)Tomcat中的ClassLoader
- python|oeasy教您玩转python - 007 - # 字符本质
- Throttle|Throttle 和 Debounce 的本质及一个简单的实现