iOS源码阅读必备知识之Tagged Pointer

2020-01-21 06:22:36王振洲

Tagged Pointer 介绍

苹果对于Tagged Pointer特点的介绍:

  • Tagged Pointer专门用来存储小的对象,例如NSNumber和NSDate
  • Tagged Pointer指针的值不再是地址了,而是真正的值。所以,实际上它不再是一个对象了,它只是一个披着对象皮的普通变量而已。所以,它的内存并不存储在堆中,也不需要malloc和free。
  • 在内存读取上有着3倍的效率,创建时比以前快106倍。

    为什么要引入Tagged Pointer

    iPhone5s 采用64位处理器。对于64位程序,我们的数据类型的长度是跟CPU的长度有关的。

    iOS源码,Tagged,Pointer

    这样就导致了 一些对象占用的内存会翻倍。

    同时 维护程序中的对象需要 分配内存,维护引用计数,管理生命周期,使用对象给程序的运行增加了负担。

    Tagged Pointer

    为了改进上面提到的内存占用和效率问题,苹果提出了Tagged Pointer对象。由于NSNumber、NSDate一类的变量本身的值需要占用的内存大小常常不需要8个字节,拿整数来说,4个字节所能表示的有符号整数就可以达到20多亿(注:2^31=2147483648,另外1位作为符号位),对于绝大多数情况都是可以处理的。