美文网首页iOS
ios NSString引用计数的那些事

ios NSString引用计数的那些事

作者: 最强的小强 | 来源:发表于2019-10-18 16:50 被阅读0次

    1.首写给出ARC下打印引用计数的方法

        NSLog("retain count = %lu\n",CFGetRetainCount((__bridge CFTypeRef)(str))); // 打印无符号长整型
        NSLog("retain count = %ld\n",CFGetRetainCount((__bridge CFTypeRef)(str))); // 打印有符号长整型
    
    1. 实际求证NSString在不同的初始化情况下,引用计数的变化
        NSString *str3 = @"1234567890";
        NSString *str4 = [[NSString alloc] initWithString:@"1234567890"]; //-1 常量区
        NSString *str5 = [[NSString alloc] initWithString:@"12345678902"]; //-1
        NSString *str6 = [NSString stringWithString:@"1234567890"]; //-1
        NSString *str7 = [NSString stringWithString:@"12345678902"]; //-1
        NSString *str8 = [NSString stringWithString:@"ew23re34rf4w3"]; //-1
        NSString *str9 = [NSString stringWithFormat:@"%@",@"1234567890"]; // 2 堆区
        NSString *str10 = [[NSString alloc] initWithFormat:@"%@",@"1234567890"]; // 1
        NSString *str11 = [[NSString alloc] initWithFormat:@"%@",@"1234567890"]; // 1
        NSString *str12 = [[NSString alloc] init]; // -1
        NSString *str13 = @"3"; // -1
        NSString *str14 = [NSString stringWithFormat:@"%@",@"127890"]; // -1
        NSString *str15 = [[NSString alloc] initWithFormat:@"%@",@"126790"]; // -1
    
    1. 查看论证结果并分析


      WechatIMG11.jpeg
    2. 结论

    1. 对于NSString的对象,不同的创建方式以及不同的字符个数都会影响对象的引用计数;
    2. 首先,当字符串的个数小于10个的时候,不管采用哪一种创建方式所得到的字符串都不存在引用计数一说,实际上是无符号整型的最大值,用有符号值打印为-1,他在在内存中的位置为常量区;
    3. 如果字符串值相同,对于通过initWithStringstringWithString方法创建的NSString对象,内存地址一样;通过initWithFormatstringWithFormat方法创建的NSString对象,内存地址不一样;
    4. 当字符串的个数大于10个的时候,
    • 通过initWithStringstringWithString方法创建的NSString对象,引用计数为-1
    • 通过initWithFormat方法创建的NSString对象,引用计数为1
    • 通过stringWithFormat 方法创建的NSString对象,引用计数为2

    未完待续 ...

    相关文章

      网友评论

        本文标题:ios NSString引用计数的那些事

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