美文网首页
iOS Tagged Pointer

iOS Tagged Pointer

作者: iOS劝退师 | 来源:发表于2020-12-16 11:41 被阅读0次

    从64bit开始引入

    Tagged Pointer技术,用于优化NSNumber、NSDate、NSString等小对象的存储

    例如:

    没有使用Tagged Pointer之前, NSNumber等对象需要动态分配内存、维护引用计数等,NSNumber指针存储的是堆中NSNumber对象的地址值。

    使用Tagged Pointer之后,NSNumber指针里面存储的数据变成了:Tag + Data,也就是将数据直接存储在了指针中。(当指针不够存储数据时,才会使用动态分配内存的方式来存储数据。)

    例子:

    给self.name赋值‘abcdefghijklmn’会crash而赋值‘aa’则不会

    原因就是‘abcdefghijklmn’字符串的长度超出,指针不够存储数据,因此走的是对象存储。

    赋值走的是set方法,如图setter方法中, 对strong修饰的属性会有一个retain和release的操作。

    而多线程中可能这个name属性已经被release了,又在另一个线程调用release,造成坏地址访问,引起crash

    而‘aa‘字符串不崩溃的原因,则因为走Tagged Pointer存储数据,不走setter方法

    相关文章

      网友评论

          本文标题:iOS Tagged Pointer

          本文链接:https://www.haomeiwen.com/subject/twyngktx.html