所有的一切都建立在苹果开源的源码上,所以明白我们研究的是什么,类-class
oc里的类统统都来自一个结构体 objc_class
以这个为切入点,我们可以尝试在源码层搜索objc_class {
方法论:由于内存结构代码量太大
cache_t 的结构长达200多行,若干个相关变量
那么楼主打算从每个关键词出发从"点-线-面"的思维方式来研究对象。(既从微观研究到宏观,然后得出一个整体思路)
理解这一点很重要,不然会看不懂接下来贴了一大堆的图片究竟是为了什么。
为newCapacity calloc一片空间
释放旧bucket,赋值新的bucket,执行缓存回收函数
garbage 通常会把data数据放在寄存器的x16 x32类似的位置来处理,而不会放在高位x0等等,防止x0~x8有数据。
1.初始化occupied()+1
2.判断容量大小
3.设置缓存的哈希头标识index
4.判断缓存的下一个节点是否是begin头 如果是给bucket的sel和imp赋值
初始化occupied=0
释放缓存
1.allocatedBucket()
2.setBucketsAndMask:根据newMask <<maskShift | newBuckets
3.occupied=0
4.如果有旧的bucket,执行释放缓存garbage_make_room & garbage_refs[garbage_count++]=data
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。