【内存管理概述 Objective-C语言】

前言

1.内存管理:
内存的作用:存储数据
内存管理的两个方面:
1)如何将数据存储到内存中
声明1个变量,然后将数据存储进去
2)当数据不再使用的时候,占用的内存空间如何被释放

一、内存中的五大区域

1)栈:局部变量,什么时候被释放呢?
if(1)
{
int num = 12;
}
大括号结束时,被释放。
局部变量,当局部变量的作用域被执行完毕之后,这个局部变量就会被系统立即回收。
num++;
这儿能不能num++?不能,因为执行到这句话时候,num已经不见了啊,已经从内存中消失了啊
2)堆:OC对象,malloc、realloc、calloc申请的空间,动态申请的空间。使用C函数申请的动态空间
3)BSS段:未初始化的全局变量和静态变量,一旦初始化就回收,并转存到数据段中
4)数据段(常量区):已经初始化的全局变量和静态变量,直到程序结束的时候才会被回收。
5)代码段:代码,程序结束的时候,系统会自动回收存储在代码段当中的数据。
6)栈 、 BSS段 、 数据段 、 代码段,存储在它们中的数据的回收,是由系统自动完成的。不需要我们干预。

二、堆里面的数据什么时候释放

1.例如:

有一个Person类,如下语句:
Person *p1 = [[Person alloc] init];
这个对象创建在哪儿的,堆里面的。
这句话用到了内存中的几个空间?
栈:
堆:
代码段:
这个p1是栈里面的数据,大括号执行完就回收。main函数执行完,p1就不见了,那这个对象呢?
1)这个对象需要被回收吗?需要
2)分配在堆区的这个OC对象,是肯定需要被回收的
iPhone:内存机制
App占用的内存达到了40M,系统就会给你发一个警告
占到45M,再给你发一个警告
占到120M,直接把你的程序给你退掉

2.堆中的OC对象,怎么被回收呢?

1)它会不会自动回收?不会
存储在堆区的OC对象,系统不会自动回收。
直到程序结束的时候,才会被回收。
2)内存管理的范围:
只需要管理存储在堆中的OC对象的回收,其他区域中的数据的回收是系统自动管理的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风清晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值