堆和栈



按管理方式看:oc对象存放于堆里面(堆内存需要程序员手动回收)

非oc对象一般放在栈里面(栈内存会被系统自动回收)

按分配方式分:堆是动态和回收内存的,没有静态分配的堆。

栈有静态分配和动态分配两种,静态分配由系统编译器完成,比如局部变量分配。动态分配是有alloc函数进行分配,它的动态分配也是由系统编译器进行释放,不需要程序员手动管理。


扩展:oc中nsstring的内存存储方式:

NSString* name = @"zhangsan"去定义,属于常量类型,程序会把这部分数据放到全局变量存储区,你不用释放,你也释放不掉,不信你可以release以后再查看它的retainCount;

[[NSString alloc] ] initWithFormat:@"%@ %@",firstname,secondname];这种类型的需要释放,因为alloc过了,程序需要手动用release释放,你写的那种方法不正确,没有直接init的。

[NSString stringWithFormat:@"%@ %@",firstname,secondname];这种类型生成的NSString是autorelease类型的变量,不需要释放,程序一次runLoop结束后就会释放。你不能用release释放。

初始化字符串的时候,直接赋值 @"abc",stringWithString ,alloc  initWithString这三种方法中,@"abc"  存放在常量池。重复赋值,不会重新分配内存空间。

注意:常量区的引用计数是lu的最大值。

stringWithFormat  alloc  initWithFormat ,存放的地址为堆区。    NSString 不需要我们进行内存管理,Foundation框架会自动帮我们管理。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 因为前段时间因为一些事情而晚上失眠多梦,身体素质直线下降,前天下班后去健身房减完身,感到恶心难受,后来发生了...
    Dely阅读 13,830评论 40 172
  • 进程的内存分区 本文的堆和栈是操作系统的内存中堆和栈,不是数据结构中的堆和栈。所有进程(执行的程序)都必须占用一定...
    Fendouzhe阅读 256评论 0 2
  • 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。 当在一段代码块定义一个变量时,Java就...
    木有鱼丸啦阅读 677评论 0 0
  • 建模与数据深度:达到LOD500 建筑、结构、设备各系统分开、分层搭建,满足各应用体系对模型和数据的要求 设计...
    图驴阅读 506评论 0 0
  • 喜欢一个人,是什么感觉呢?是莫名的悸动。那爱呢,是什么感觉?是莫名的心跳。这是我一位朋友的答案。 有人说,喜欢...
    墨语枫桦阅读 216评论 0 0

友情链接更多精彩内容