美文网首页iOS基础篇
NSString 的内存管理

NSString 的内存管理

作者: 麦子_KB | 来源:发表于2021-07-20 23:36 被阅读0次

前段时间看了同事的分享,于是把它记录下来

先看下这几个测试代码,关于 NSString:

NSString *a = @"abc";
NSString *b = [[NSString alloc] init];
NSString *c = [[NSString alloc] initWithString:@"abc"];
NSString *d = [[NSString alloc] initWithFormat:@"abc"];
NSString *e = [NSString stringWithFormat:@"abc"];
NSString *f = [NSString stringWithFormat:@"123456789"];
NSString *g = [NSString stringWithFormat:@"1234567890"];

执行后打印输出结果:

变量名=a,类型=__NSCFConstantString
变量名=b,类型=__NSCFConstantString
变量名=c,类型=__NSCFConstantString
变量名=d,类型=NSTaggedPointerString
变量名=e,类型=NSTaggedPointerString
变量名=f,类型=NSTaggedPointerString
变量名=g,类型=__NSCFString

可以看出 NSString 是有几种类型的:

  • __NSCFConstantString
    文字常量区存放常量字符串,程序结束后由系统释放,也就是说指向常量表的指针不受引用计数管理。所以对于NSCFConstantString类型的变量,OC 的内存管理策略对其无效
  • NSTaggedPointerString
    对于64位程序,为了节省内存和提高运行速度,苹果引入了 Tagged Point 技术。NSTaggedPointerString是对NSCFString优化后的存在,在运行时创建时对字符串的内容和长度做出判断,若字符串内容是由ASCII字符构成且长度较小(大概十个字符以内),这时候创建的字符串就是NSTaggedPointerString类型,字符串直接存储在指针里,引用计数同样为-1,不适用对象的内存管理策略
  • Tagged Pointer
    它的指针的值不再是地址了,而是真正的值。所以,实际上它不再是一个对象了,它只是一个披着对象皮的普通变量而已。所以,它的内存并不存储在堆中,OC 对象的内存管理方式对其无效。
  • __NSCFString
    表示这是一个对象类型的字符串,在运行时创建,存储在堆区,服从OC 的对象内存管理策略。

我们可以看下面这张图:


NSString 内存管理方式

关于NSString是不是还有很多惊喜呢?欢迎补充

相关文章

  • iOS内存管理详解

    目录 block内存管理 autorelease内存管理 weak对象内存管理 NSString内存管理 new、...

  • NSString内存管理

    NSString的内存优化 OC中的NSString不论是在编译时还是在运行时都做了很多的优化,并不同于普通的对象...

  • NSString 内存管理

    在学习自动释放池与RunLoop的关系的时候发现申明NSString类型的变量未随RunLoop的进入休眠而释放,...

  • NSString 的内存管理

    前段时间看了同事的分享,于是把它记录下来 先看下这几个测试代码,关于 NSString: 执行后打印输出结果: 可...

  • Foundation框架---NSString

    //创建字符串的方式 NSString*str3 =@"iOS";//系统会对内存自动做管理 NSString *...

  • [8]NSString内存管理

    NSSting内存 栈区(stack): 这个一般由编译器操作,或者说是系统管理,会存一些局部变量,函数跳转跳转时...

  • iOS NSString 内存管理

    iOS中,NSString对象相对其他OC对象的内存管理是复杂的。按照产生对象的isa,大致可以分为三种情况,如下...

  • iOS strong和copy的区别

    在iOS开发中,几乎每天都会遇到NSString属性的声明, 在ARC内存管理机制下, NSString属性声明有...

  • Ios面试复习--NSString的内存管理

    1.NSString类的内存管理 2.NSString 类型的属性 的@property修饰符号 参考文章第6部分...

  • iOS基础:内存管理-NSString相关知识

    前言 本文主要讲的是NSString类有关的内存管理基础知识。 正文 一、面试常问的问题:为什么NSString的...

网友评论

    本文标题:NSString 的内存管理

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