【OC】NSString的三种类型

NSString的三种类型以及创建方式

NSString一共有三种类型:

  • NSCFString
  • NSCFConstantString
  • NSTaggedPointerString

注意:必须先关闭ARC

        NSString* str1 = @"hello";
        NSString* _str1 = [NSString stringWithString:@"hello"];
        NSString* str2 = [NSString stringWithFormat:@"hello"];
        NSString* str3 = [NSString stringWithFormat:@"hello,world"];
        NSString* str4 = [NSString stringWithFormat:@"abcdef"];
        NSString* str5 = [NSString stringWithFormat:@"hello,world"];
        NSString* str6 = [NSString stringWithFormat:@"哈哈哈"];
        NSLog(@"str1 = %p %@ %lu", str1, [str1 class], [str1 retainCount]);
        NSLog(@"_str1 = %p %@ %lu", _str1, [_str1 class], [_str1 retainCount]);
        NSLog(@"str2 = %p %@ %lu", str2, [str2 class], [str2 retainCount]);
        NSLog(@"str3 = %p %@ %lu", str3, [str3 class], [str3 retainCount]);
        NSLog(@"str4 = %p %@ %lu", str4, [str4 class], [str4 retainCount]);
        NSLog(@"str5 = %p %@ %lu", str5, [str5 class], [str5 retainCount]);
        NSLog(@"str6 = %p %@ %lu", str6, [str6 class], [str6 retainCount]);

运行结果
在这里插入图片描述

_NSCFConstantString

这个字符串可以通俗的理解为常量字符串,他是NSCFString的一个子类,表示不可变的常量字符串。通常使用@" "stringWithString方法来生成这种类型。
在这里插入图片描述
由运行结果可以知道,该种字符串为了节省内存,每个相同的字符串只会储存一份,故而该种字符串当内容相同时,其对象的地址相同。这证明常量字符串是一种单例
该种字符串储存在字符串常量区。

_NSCFString

和 __NSCFConstantString 不同, __NSCFString 对象是在运行时创建的一种 NSString 子类,他并不是一种字符串常量。所以和其他的对象一样在被创建时获得了 1 的引用计数。
在这里插入图片描述

  • 由运行结果可以看到,_NSCFString对象被创建后获得了1的引用计数。
  • 该种对象被储存在堆区中。
  • 一般来说,使用stringWithFormat方法创建的NSString对象都是该种类型。

NSTaggedPointerString

NSTaggedPointerString 是 Objective-C 中 NSString 的一个特殊实现,用于表示小型字符串。

  • NSTaggedPointerString 专门针对长度较短的字符串进行了优化。
  • 它可以将小型字符串直接编码到指针本身,而无需分配单独的内存块。
  • 对于NSString对象来说,当字符长度小于等于9时,同时字符都是ASCII码表内的字符,即会生成NSTaggedPointerString类型。当出现汉字会立即生成_NSCFString类型。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值