Runtime objc4-723 Tagged Pointer & 对象初始化流程
Posted Jsen_Wang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Runtime objc4-723 Tagged Pointer & 对象初始化流程相关的知识,希望对你有一定的参考价值。
Runtime objc4-723 Tagged Pointer & 对象初始化流程
Tagged Pointer
传统意义上,指针的值制式一个内存地址,它本身并没有什么意义,但是在Apple用了64位的系统后,一个指针就会有8个字节 64位,这么长的内容只表示一个地址是很浪费的。
所以为了优化这个问题,Tagged Pointer概念被提出来,它的出现让一个指针的值富有了非地址之外的其他内容,举个例子:
NSNumber *number1 = @1;
NSNumber *number2 = @3;
NSNumber *number3 = @54;
(lldb) p number1
(__NSCFNumber *) $3 = 0xb000000000000012 (int)1 (lldb) p number2
(__NSCFNumber *) $4 = 0xb000000000000032 (int)3 (lldb) p number3
(__NSCFNumber *) $5 = 0xb000000000000362 (int)54
指针0xb000000000000012去除前边的0xb
和 后边的1
用16进制表达就是2
可以看出,指针的字面量值就是变量表示的实际值。
这样的操作让很多对象的创建可以忽略,省去malloc
free
的过程,极大地提升了效率
isa_t
struct
uintptr_t nonpointer
uintptr_t has_assoc
uintptr_t has_cxx_dtor
uintptr_t shiftcls
uintptr_t magic
uintptr_t weakly_referenced : 1; uintptr_t deallocating : 1; uintptr_t has_sidetable_rc : 1;
uintptr_t extra_rc : 19;
;
这是isa_t
的结构体声明
对象初始化流程
待完成
以上是关于Runtime objc4-723 Tagged Pointer & 对象初始化流程的主要内容,如果未能解决你的问题,请参考以下文章
javascript tagged_template_literals
javascript tagged_template_literals.js
未找到带有参数 '('',)' 的 'tagged' 的反向操作。尝试了 1 种模式:['^tag/(?P<slug>[-\w]+)/$']