Objective-C NSString
研究了一下 Objective-C 中 NSSting
- 代码
1 | // __NSCFConstantString |
- 输出
1 | test1 class:__NSCFConstantString ++ 内存地址:0x100df9668 ++ 指针地址:0x7ffeeee194c8 |
- 分析
test1 的创建 NSString 方式,在编译器中已经完全被字面量的创建方式取代了,编译器会自动帮你。
test2 字面量创建 NSString
test3 是对 test2 的指针拷贝
这三种方式穿件的 NSString,类型都是 __NSCFConstantString,应该是放在常量区,指针存放在 stack
内容相同的时候,内存地址也相同
test3 NSMutableString 对象
test4 stringWithFormat 创建,注意,其内容一定要大于 8 个字节
test3&test4,类型是 __NSCFString,是对象,和 OC 中的普通对象基本一致,存储在 heap 中,指针在 stack
内存地址不会相同
test5 是对 test3 的深拷贝,从 NSMutableString 转变为 NSString
test6 和 test7 都是 stringWithFormat 创建的短字符串,小于 8 个字节
test5、test6、test7 ,类型都是 NSTaggedPointerString,tagged pointer 实际是一个伪对象,他的地址就是他的值,如下图可以看出,这三个并没有 isa 指针
关于 tagged pointer ,可以看唐巧大佬的文章:深入理解 Tagged Pointer
Objective-C NSString