美文网首页
iOS 引用计数-1问题

iOS 引用计数-1问题

作者: xing_xing | 来源:发表于2018-09-23 10:57 被阅读56次

介绍 :

NSCFConstantString (retain/release不起作用,系统进行维护,程序中内容相同的常量字符串只有一个)
NSCFString (retain/release有作用)
NSTaggedPointerString (retain/release不起作用) 

验证代码

NSString *str = @"test";
NSLog(@"str--->%ld",[str retainCount]);   // NSCFConstanString 类型

NSString *str1 = [@"test" copy];
NSLog(@"str1--->%ld",[str1 retainCount]);  // NSCFConstanString

// 拷贝后是可变类型
NSString *str2 = [@"test" mutableCopy];
NSLog(@"str2--->%ld",[str2 retainCount]); // NSCFString

NSString *str3 = [NSString stringWithString:@"test"];
NSLog(@"str3--->%ld",[str3 retainCount]);  // NSCFConstanString

NSString *str4 = [NSString stringWithFormat:@"%@",@"test"];
NSLog(@"str4--->%ld",[str4 retainCount]);  // NSTaggedPointerString

NSString  *str5 = [[NSString alloc] initWithString:@"Hello World"];
NSLog(@"str5--->%ld",[str5 retainCount]);  // NSCFConstanString

NSString* str6 = [[NSString alloc] initWithFormat:@"%@",@"Hello World"];
NSLog(@"str6--->%ld",[str6 retainCount]);   // NSCFString


// 本质上还是不可变类型
NSMutableString *mutableStr = [@"test" copy];
NSLog(@"mutableStr--->%ld",[mutableStr retainCount]);  // NSCFConstanString

NSMutableString *mutableStr1 = [@"test" mutableCopy];
NSLog(@"mutableStr1--->%ld",[mutableStr1 retainCount]);  // NSCFString

NSMutableString *mutableStr2 = [NSMutableString stringWithString:@"test"];
NSLog(@"mutableStr2--->%ld",[mutableStr2 retainCount]);  // NSCFString

NSMutableString *mutableStr3 = [NSMutableString stringWithFormat:@"%@",@"test"];
NSLog(@"mutableStr3--->%ld",[mutableStr3 retainCount]);  // NSCFString

NSMutableString *mutableStr4 = [[NSMutableString alloc]initWithString:@"test"];
NSLog(@"mutableStr4--->%ld",[mutableStr4 retainCount]);  // NSCFString

NSMutableString *mutableStr5 = [[NSMutableString alloc]initWithFormat:@"%@",@"test"];
NSLog(@"mutableStr5--->%ld",[mutableStr5 retainCount]);   // NSCFString

输出 :

 2018-09-23 10:38:08.187 LZX_Test001[2713:191391] str--->-1
 2018-09-23 10:38:08.188 LZX_Test001[2713:191391] str1--->-1
 2018-09-23 10:38:08.188 LZX_Test001[2713:191391] str2--->1
 2018-09-23 10:38:08.188 LZX_Test001[2713:191391] str3--->-1
 2018-09-23 10:38:08.188 LZX_Test001[2713:191391] str4--->-1
 2018-09-23 10:38:08.189 LZX_Test001[2713:191391] str5--->-1
 2018-09-23 10:38:08.189 LZX_Test001[2713:191391] str6--->1


  2018-09-23 10:53:03.549 LZX_Test001[2757:198382] mutableStr--->-1
  2018-09-23 10:53:03.549 LZX_Test001[2757:198382] mutableStr1--->1
  2018-09-23 10:53:03.550 LZX_Test001[2757:198382] mutableStr2--->1
  2018-09-23 10:53:03.550 LZX_Test001[2757:198382] mutableStr3--->1
  2018-09-23 10:53:03.550 LZX_Test001[2757:198382] mutableStr4--->1

结论 :
1. 只有NSCFString 类型指针才会参与引用计数
2. NSString使用initWithFormat创建是NSCFString类型指针

相关文章

  • iOS 引用计数-1问题

    介绍 : 验证代码 输出 : 结论 :1. 只有NSCFString 类型指针才会参与引用计数2. NSStrin...

  • iOS内存管理1:引用计数

    iOS内存管理1:引用计数 引用计数: Objecttive-C使用引用计数来进行内存管理。然后,引用计数其实是不...

  • 内存管理-MRC与ARC

    引用计数 在iOS中,使用引用计数来管理OC对象的内存1、一个新创建的OC对象引用计数默认是1,当引用计数减为0,...

  • iOS内存管理初探 – 引用计数、AutoRelease与ARC

    引用计数式内存管理 引用计数 iOS通过引用计数管理对象的生命周期,每个对象有其引用计数。 对象被强引用时引用计数...

  • iOS中的NSString引用计数问题(-1和整数最大值) -

    iOS中的NSString引用计数问题(-1和整数最大值) - 不疯不成魔 - 博客园

  • iOS面试知识点

    1、ios内存管理机制 iOS内存管理机制的原理是引用计数,当这块内存被创建后,它的引用计数0->1,表示有一个对...

  • ios常见面试题总结

    1.谈一谈IOS内存管理机制。 IOS内存管理机制的原理是引用计数,当这块内存被创建后引用计数加1,这时若果有另一...

  • OC类对象的内存管理、AutoreleasePoolPage

    内存管理: 在iOS中,使用引用计数来管理OC对象的内存 一个新创建的OC对象引用计数默认是1,当引用计数减为0,...

  • 【iOS-内存管理】

    在iOS使用引用计数来管理OC对象的内存 一个新创建的OC对象的引用计数是1,当引用计数减为0,OC对象就会销毁,...

  • 内存管理

    OC对象的内存管理 在iOS中,使用引用计数来管理OC对象的内存 一个新创建的OC对象引用计数默认是1,当引用计数...

网友评论

      本文标题:iOS 引用计数-1问题

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