为了节省内存和提高执行效率,所以有tagged pointer这玩意儿。tagged pointer可能会应用于NSNumber
、NSString
、NSDate
、NSIndexPath
等
出现问题
这张图以NSNumber为例,占用空间翻倍了,所以想搞些优化,再看看优化方案
这么一搞省了很多空间
分析tagged pointer
tagged pointer占64位
高4位
:1位标识+3位类型
中间
: 存储对象的值(string用ASCII码表示)
低四位
:具体看这个对象是什么类型,比如NSString时为length,NSnumber则为里面数的类型Int为2、long为3、float为4、double为5。
- tagged pointer直接在栈里面,节省了内存,提高的访问效率
- tagged pointer局限性很明显,空间就这么大,中间56位装不了或者没法用的时候(比如string内容有汉字无法用ASCII码表示),就得老老实实用之前的方案
- tagged pointer本质上已经不是原本说的对象了,只不过外面他还表现为
nsnumber,nsstring...