从64位开始,iOS引入了TaggedPointer技术,用于优化NSNumber、NSDate、NSString等小对象的存储
1.将值直接存储到变量指针中,不必开辟堆空间。
2.实例对象方法取值也会调用objc_msgSend,在方法中判断,如果是Tagged Pointer对象直接取值,如果不是根据isa取值
iOS系统 TaggedPointer对象地址最高位为1
TaggedPointer对象地址 & mask 0x1000 0000 0000 0000 取值等于0x1000 0000 0000 0000
Mac系统 TaggedPointer对象地址最低位为1
TaggedPointer对象地址 & mask 0x0000 0000 0000 0001 取值等于0x0000 0000 0000 0001