美文网首页iOS 提升
NSString 的引用计数

NSString 的引用计数

作者: Lucky_1122 | 来源:发表于2018-09-12 16:55 被阅读92次

    string 分配在常量区的时候retainCount=2的32次方-1(不在遵循引用规则)

     NSString *str1 = @"haha";
        [str1 retain];
        NSString *str2 = [[NSString alloc] initWithString:@"haha"];
        NSString *str3 = [[NSString alloc]initWithFormat:@"haha"];
        NSString *str4 = [NSString stringWithFormat:@"haha"];
        NSString *str5 = [[NSString alloc]initWithFormat:@"0123456789"];
        NSString *str55 = [[NSString alloc]initWithFormat:@"0123456789"];
        NSString *str6 = [[NSString alloc]initWithFormat:@"哈哈"];
        
        NSLog(@"%u---%p",(unsigned)str1.retainCount,str1);
        NSLog(@"%u---%p",(unsigned)[str2 retainCount],str2);
        NSLog(@"%u---%p",(unsigned)[str3 retainCount],str3);
        NSLog(@"%u---%p",(unsigned)[str4 retainCount],str4);
        NSLog(@"%u---%p",(unsigned)[str5 retainCount],str5);
         NSLog(@"%u---%p",(unsigned)[str55 retainCount],str55);
        NSLog(@"%u---%p",(unsigned)[str6 retainCount],str6);
        
        
    输出结果:
    2018-09-12 16:52:15.868921+0800 ARCTest[9302:364513] 4294967295---0x10d05c050
    2018-09-12 16:52:15.869111+0800 ARCTest[9302:364513] 4294967295---0x10d05c050
    2018-09-12 16:52:15.869219+0800 ARCTest[9302:364513] 4294967295---0xa000000616861684
    2018-09-12 16:52:15.869326+0800 ARCTest[9302:364513] 4294967295---0xa000000616861684
    2018-09-12 16:52:15.869449+0800 ARCTest[9302:364513] 1---0x604000037a00
    2018-09-12 16:52:15.869667+0800 ARCTest[9302:364513] 1---0x60400023f540
    2018-09-12 16:52:15.869770+0800 ARCTest[9302:364513] 1---0x60400023ed00
    
    

    用String声明的字符串,初始化是在常量区,不再遵循引用计数规则,只要值一样,占用的地址空间是一样的,所以str1 和str2的地址是一样。
    str3和str4 的地址也是一样的 是因为当NSString(汉字和特殊字符除外)字符串的长度小于10位的时候也是分布在常量区的.(默认会将一些长度小于10的字符串直接保存在指针上面,下次创建相同值的时候直接用同一份拷贝,好处是减少了一次指针到值的访问,又减少了一份内存的占用)。
    str5 和 str55 当初始化的字符串的长度大于等于10位的时候是分配在堆上的,地址也就不一样 而且引用计数也会正常.
    str6 当字符串初格式化是汉字或者特殊字符 在堆区开辟空间,有引用计数。

    相关文章

      网友评论

        本文标题:NSString 的引用计数

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