美文网首页
NSString在内存中的存储

NSString在内存中的存储

作者: Bauyin89 | 来源:发表于2018-09-07 17:38 被阅读67次

    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在内存中的存储

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