美文网首页
ios NSString类族

ios NSString类族

作者: liang1030 | 来源:发表于2020-03-18 15:43 被阅读0次

NSString是一个类簇(Class Clusters),最后生成的对象类型,取决于我们调用的初始化方法。不同的对象类型的管理方式不一样(在retainCount上有所体现)

类型 初始化后的retaincount
__NSCFConstantString -1
__NSCFString 1
__NSTaggedPointerString -1

1, 对于__NSCFConstantString,系统进行维护,retain和release不起作用(程序中内容相同的常量字符串只有一个)

2,__NSCFString与其他oc对象一样维护retainCount

3,__NSTaggedPointerString,retain/release不起作用

NSString *a = @"a";
NSString *c = [a copy];
NSLog(@"%p %p", a,c);//输出两个相同的地址,并没有真正的复制

例子:

一,__NSCFConstantString

1,@""格式的字符串

 NSString *str1 = @"string";//__NSCFConstantString
 NSLog(@"str1:%d",[str1 retainCount]);// -1
NSLog(@"[str1 class]: %@",[str1 class]);//__NSCFConstantString

2,stringWithString+__NSCFConstantString

 NSString *str3 = [NSString stringWithString:@"str3"];//__NSCFConstantString
NSLog(@"str3:%d",[str3 retainCount]); // -1
NSLog(@"[str3 class]: %@",[str3 class]);//__NSCFConstantString

二,__NSTaggedPointerString

1,

NSString *str2 = [NSString stringWithFormat:@"%s", "str2"];//__NSTaggedPointerString
NSLog(@"str2:%d",[str2 retainCount]); // -1 

2,

NSString *a = @"a";
NSString *b = [[a mutableCopy] copy];//__NSTaggedPointerString
NSLog(@"b:%d",[b retainCount]); // -1

三,__NSCFString

1,通过stringWithFormat构造

NSString *str2_2 = [NSString stringWithFormat:@"%s,%d", "str2_2",22];//__NSCFString
NSLog(@"str2_2:%d",[str2_2 retainCount]); //1

2,stringWithString + stringWithFormat

NSString *str4_2 = [NSString stringWithString:[NSString stringWithFormat:@"hahah"]];//__NSCFString
NSLog(@"str4_2:%d",[str4_2 retainCount]); // 1

NSString *str4_1_1 = [NSString stringWithString:[NSString stringWithFormat:@"%s", "str2"]];
NSLog(@"str4_1_1:%d",[str4_1_1 retainCount]); //1

NSString *str4 = [NSString stringWithString:[NSString stringWithFormat:@"%s,%d", "str4",22]];//__NSCFString
      NSLog(@"str4:%d",[str4 retainCount]); // 1

3,stringWithString+__NSTaggedPointerString对象

NSString *str2 = [NSString stringWithFormat:@"%s", "str2"];//__NSTaggedPointerString
NSString *str4_1_1 = [NSString stringWithString:[NSString stringWithFormat:@"%s", "str2"]];
NSLog(@"str4_1_1:%d",[str4_1_1 retainCount]); //1

4,stringWithString+__NSCFString对象

NSString *str2_2 = [NSString stringWithFormat:@"%s,%d", "str2_2",22];//__NSCFString
SString *str4_3 = [NSString stringWithString:str2_2];
NSLog(@"str4_3:%d",[str4_3 retainCount]); //2

5,NSMutableString对象

NSMutableString* str5 = [NSMutableString stringWithString:@"str5"];//__NSCFString
NSLog(@"str5:%d",[str5 retainCount]); //1

总结:

1,retainCount的不同本质上是因为NSString类簇返回的子类的不同,__NSCFConstantString 和__NSTaggedPointerString初始值为-1,__NSCFString为1

2,亦可通过方法来区分得到的字符串的类型

2.1,@”“格式得到的为常量字符串
2.2,stringWithFormat得到的可能为__NSCFConstantString或者__NSTaggedPointerString
2.3,stringWithString

2.3.1,stringWithString+__NSCFConstantString得到__NSCFConstantString
2.3.2,stringWithString+stringWithFormat得到__NSCFString,初始计数值为1
2.3.3,stringWithString+__NSTaggedPointerString对象得到__NSCFString,初始计数值为1
2.3.4,stringWithString+__NSCFString对象得到__NSCFString,初始计数值为2

参考:https://www.cnblogs.com/rainySue/p/NSString-yu-qi-guai-deretainCount.html

相关文章

  • ios NSString类族

    NSString是一个类簇(Class Clusters),最后生成的对象类型,取决于我们调用的初始化方法。不同的...

  • 你以为简单的NSString你就不会用错了吗?

    NSString 是ios最常用的类,一个应用无非包含文字,图片,视频多媒体。NSString 自然是应用里面使用...

  • iOSBasicClassType

    iOS中有很多类,今天我们来讨论一些基本的类,以及他们的子类,相信NSString,NSArray,NSDicti...

  • iOS 类族(类簇)

    什么是类族 "类族"是一种很有用的模式(pattern),可以隐藏"抽象基类"背后的实现细节.比如UIKit框架中...

  • 类簇,从NSArray说起

    在iOS开发中,广泛运用了类蔟(Class clusters)的设计模式。如NSNumber、NSString、N...

  • 关于类簇

    在ios中,比如NSString,NSArray, NSNumber 这些都是类簇,大概就是说,他们在alloc的...

  • 打开QQ与陌生人聊天

    iOS10 之后: NSString *qq=[NSString stringWithFormat:@"mqq:/...

  • iOS 可变与不可变

    在iOS项目当中经常会用到NS开头的类,比如NSString、NSDictionary、NSArray不可变,可变...

  • iOS开发中常用的方法(二)(持续更新)

    接上一篇 iOS开发中常用的方法(一)# NSString常见用法:### 常见文件操作### 异常捕捉: 获取类...

  • Objective-C 之字符串与数值

    一. NSString类 1. NSString类 可以根据NSString类给的便利构造器创建字符串对象,或者通...

网友评论

      本文标题:ios NSString类族

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