NSString在内存中的存储

NSString在内存中有三种存在形式:

1:__NSCFConstantString:NSString的值存储在常量区
出现时刻:NSString*str =@"123";

2:__NSCFString:NSString的值存储在堆区
出现时刻:当系统想把一个NSString对象存储在堆区的时候,有可能生成__NSCFString;
出现方法:[NSString stringWithFormat:@"123"] 和 [NSMutableString copy]有可能会生成__NSCFString;
出现逻辑:当系统想把一个NSString对象存储在堆区,就会考虑是否使用TaggedPointer进行存储;如果满足TaggedPointer条件,NSString的值就会被存储到指针中,生成NSTaggedPointerString对象;如果不满足TaggedPointer条件,就会在堆区开辟内存空间存储NSString的值,生成__NSCFString对象;

3:NSTaggedPointerString:NSString的值存储在指针中
出现时刻:当系统想把一个NSString对象存储在堆区的时候,有可能生成NSTaggedPointerString;
出现方法:[NSString stringWithFormat:@"123"] 和 [NSMutableString copy]有可能会生成NSTaggedPointerString;
出现逻辑:当系统想把一个NSString对象存储在堆区,就会考虑是否使用TaggedPointer进行存储;如果NSString的值不包含非ASCII码,并且NSString的长度经过TaggedPointer算法压缩后不超过56位,NSString的值就会被存储到NSString指针中,生成NSTaggedPointerString对象;如果不满足上述条件,就会在堆区开辟内存空间存储NSString的值,生成__NSCFString对象;


NSMutableString
在内存中只有一种存在形式:__NSCFString,其只能存放在堆区

你可能感兴趣的:(NSString在内存中的存储)