NSString内存管理之 __NSCFConstantString、NSTaggedPointerString、__NSCFString

1,405 阅读1分钟

NSString内存管理之 __NSCFConstantString、NSTaggedPointerString、__NSCFString

     //1. __NSCFConstantString**

    //    字符串常量,是一种编译时常量,它的 retainCount 值很大,是 4294967295,

    NSString *Str1 = @"xxx";

    NSString *Str11 = [[NSString alloc] initWithString:@"xxx"];

    

    

    //2.NSTaggedPointerString

    //  标签指针,这是苹果在 64 位环境下对 NSString,NSNumber 等对象做的一些优化。简单来讲可以理解为把指针指向的内容直接放在了指针变量的内存地址中,因为在 64 位环境下指针变量的大小达到了 8 位足以容纳一些长度较小的内容。于是使用了标签指针这种方式来优化数据的存储方式。从他的引用计数可以看出,这货也是一个释放不掉的单例常量对象。在运行时根据实际情况创建。

    NSString *Str3 = [NSString stringWithFormat:@"xxxyyyzzz"];

    NSString *Str33 = [[NSString alloc] initWithFormat:@"xxx"];

    

    

    //3. __NSCFString

    //  __NSCFString 对象是在运行时创建的一种 NSString 子类,他并不是一种字符串常量。所以和其他的对象一样在被创建时获得了 1 的引用计数。

    //通过 NSString 的 stringWithFormat 等方法创建的比较长的  NSString 对象一般都是这种类型。

    NSString *Str4 = [NSString stringWithFormat:@"xxxyyyzzzaaabbbcccddd"];

    NSString *Str44 = [NSString stringWithFormat:@"xxxyyyzzzaaabbbcccddd%@", Str1];




    NSLog(@"");

image.png

地址

image.png