文档章节

NSString的类型

A
 AAAAdler
发布于 2017/04/20 23:48
字数 257
阅读 24
收藏 0

以下代码关闭了ARC,定义了一个宏,便于我们查看输出

#define MLog(_var) ({NSString* name = @#_var;NSLog(@"%@: %@ -> %p -> %@ -> %d",name,[_var class],_var,_var,(int)[_var retainCount]);})

测试代码和结果

    NSString* aStr = @"123";
    MLog(aStr);
    NSString* bStr = [NSString stringWithFormat:@"123456789"];
    MLog(bStr);
    NSString* cStr = [NSString stringWithFormat:@"1234567890"];
    MLog(cStr);
    /*stringWithFormat:生成的对象,如果长度在10以下,类型是NSTaggedPointerString;如果在10以上,类型是NSCFString*/
    
    NSString* dStr = [cStr retain];
    MLog(dStr);
    NSString* eStr = [cStr copy];
    MLog(eStr);
    
    NSString* fStr = [aStr mutableCopy];
    MLog(fStr);

结果:
 aStr: __NSCFConstantString -> 0x10384a080 -> 123 -> -1
 bStr: NSTaggedPointerString -> 0xa1ea1f72bb30ab19 -> 123456789 -> -1
 cStr: __NSCFString -> 0x60000002b100 -> 1234567890 -> 1
 dStr: __NSCFString -> 0x60000002b100 -> 1234567890 -> 2
 eStr: __NSCFString -> 0x60000002b100 -> 1234567890 -> 3
 fStr: __NSCFString -> 0x600000264140 -> 123 -> 1

可以看出,NSString有三种类型NSCFConstantString、NSTaggedPointerString和NSCFString.

NSCFConstantString是以字面量方式生成的,retainCount是-1,无论copy或者retain都不会变化retainCount的。相当于指针指向一个常量地址。

NSCFString不属于常量对象,copy和retain会引起retainCount变化。

NSTaggedPointerString是一种Tagged Pointer指针,这种指针是苹果针对64位实现进行的内存使用优化。copy和retain会引起retainCount变化。

© 著作权归作者所有

A
粉丝 3
博文 26
码字总数 23250
作品 0
广州
私信 提问
关于NSString判空与移除字符串首尾空白方法的设计

关于NSString判空与移除字符串首尾空白方法的设计 背景 不太理解,什么叫空字符串。 不恰当的删除字符串首尾空白。 不恰当的返回删除字符串首尾空白之后的值。 判空设计 删除字符串首尾空白设...

treebug
2017/11/02
35
0
Object-c 中的数据类型

导航: 基本类型 ID 对象类型常见的有 对象类型 -NSLog -NSNumber -NSString和NSMutableString -NSArray和NSMutableArray -NSSet和NSMutableSet -NSDictionary和NSMutableDictionary 基本类型......

gaoios
2014/01/05
998
0
[swift]-字符串和oc字符串的对比使用

swift中字符串和oc字符串的区别: > 1:swift字符串的类型是String,oc 字符串的类型是NSString > 2:swift字符串的写法是"123",oc字符串的写法是@"123" swfit中字符串的类型为什么是String ,它......

XJDomain
2016/07/31
47
0
Objective-C 多参数成员函数

多个参数的写法 (方法的数据类型)函数名:(参数1数据类型)参数1的数值的名字 参数2的名字: (参数2数据类型) 参数2值的名字 …. ; 举个例子,一个方法的定义: -(void) setKids: (NSString *)m...

长平狐
2012/11/01
938
0
NSString内存分配与管理

NSString常用方法总结很详细:http://justcoding.iteye.com/blog/1405951 生成一个NSString类型的字符串有三种方法: 方法1.直接赋值: NSString testStr1 = @"a"; 方法2.类函数初始化生成: N...

火龙战士
2015/07/09
256
0

没有更多内容

加载失败,请刷新页面

加载更多

redis 学习2

网站 启动 服务端 启动redis 服务端 在redis 安装目录下 src 里面 ./redis-server & 可以指定 配置文件或者端口 客户端 在 redis 的安装目录里面的 src 里面 ./redis-cli 可以指定 指定 连接...

之渊
昨天
2
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
昨天
4
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
昨天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
昨天
24
0
java数据类型

基本类型: 整型:Byte,short,int,long 浮点型:float,double 字符型:char 布尔型:boolean 引用类型: 类类型: 接口类型: 数组类型: Byte 1字节 八位 -128 -------- 127 short 2字节...

audience_1
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部