https://www.jianshu.com/p/df630e78df32其中包含了对NSTaggedPointerString的详细理解
NSString * testStr = @"asdasssdaaaaaa"; // 看完上面的文章后,这个字符串的长度会影响系统是否使用TaggedPointer
NSString * testStr1 = [NSString stringWithFormat:testStr,nil];
NSString * testStr2 = [NSString stringWithFormat:testStr,nil];
如果testStr的长度超出了TaggedPointer的适用范围,那么系统对testStr1只能用_NSCFString类型来存储。
TaggedPointer范围内会生成NSTaggedPointerString类型来存储testStr1,并且testStr1和testStr2内容为同地址。
例子:TaggedPointer范围内
print testStr
(__NSCFConstantString *) $3 = 0x000000010617a1a8 @"aaaaaa"
print testStr1
(NSTaggedPointerString *) $2 = 0xf9ab825d8dc97ca5 @"aaaaaa"
print testStr2
(NSTaggedPointerString *) $0 = 0xf9ab825d8dc97ca5 @"aaaaaa"
TaggedPointer范围外
print testStr
(__NSCFConstantString *) $0 = 0x00000001016421a8 @"asdasssdaaaaaa"
print testStr1
(__NSCFString *) $1 = 0x0000000282074100 @"asdasssdaaaaaa"
print testStr2
(__NSCFString *) $2 = 0x0000000282049960 @"asdasssdaaaaaa"