美文网首页
NSString 内存管理

NSString 内存管理

作者: 1剑天下 | 来源:发表于2019-06-04 15:26 被阅读0次

    在学习自动释放池与RunLoop的关系的时候发现申明NSString类型的变量未随RunLoop的进入休眠而释放,通过查看资料以及代码验证解除了心中疑惑

      NSString *str =@"str";
       NSString *str1 =@"str111111111";
     NSString * str2 = [NSString stringWithString:@"sa"];
     NSString * str3 = [NSString stringWithString:@"sa777777777777"];
     NSString *str4= [[NSString alloc] initWithString:@"123"];
     NSString *str5 = [[NSString alloc] initWithString:@"123dertyuiuyt"];
    
    

    str ...5 打印的类型都为NSCFConstantString 都存放在常量区 由程序控制释放,在程序结束的时候释放

    image.png
        NSString *str6 = [NSString stringWithFormat:@"sunnyxx"];
         NSString *str7 = [NSString stringWithFormat:@"sunnyxx3333333"];
         NSString *str8 = [[NSString alloc] initWithFormat:@"wxwe"];
         NSString *str9 = [[NSString alloc] initWithFormat:@"wxwe444444444"];
    

    str6....9 大于9位时类型__NSCFString 小于9时为NSTaggedPointerString __NSCFString类型ARC下通过release和自动释放池来释放 aggedPointerString 它的作用就是:节省短的变量的内存。用指针地址的富余位存变量值。 NSTaggedPointerString:phone 5s的时候,为了节省内存和提高执行效率,苹果提出了Tagged Pointer的概念 这个地址本身其实就存储了字符串的值 可以说是存储在&strS内存中值,只是伪装成了地址,它不需要存储在数据区,也不需要申请堆空间。

    image.png image.png
    NSString存储管理--NSTaggedPointerString
    iOS 开发之关于__weak修饰NSString以及内存管理的问题(https://blog.csdn.net/shifang07/article/details/54409763)

    相关文章

      网友评论

          本文标题:NSString 内存管理

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