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"