iOS中内存管理(基本概念)

382 阅读2分钟

这是我参与8月更文挑战的第11天,活动详情查看:8月更文挑战

内存管理重要性

  • 移动设备的内存极其有限,每个APP所占的内存都是有限的
  • 下列行为就会增加一个APP的内存占用
    • 创建一个OC对象
    • 定义一个变量
    • 调用一个函数或者方法
    • 当APP所占用内存较多时,系统会发出内存警告,这时得回收一些不需要再次使用的内存空间,比如收一些不需要使用的对象、变量等
  • 若果APP占用内存过大,系统会强制关闭APP,造成闪退,影响用户体验

内存管理

  • 内存管理:就是管理内存的分配和清除
  • 内存管理涉及的操作有:
    • 分配内存:比如创建一个对象,会增加内存占用
    • 清楚内存:比如销毁一个对象,能减少内存占用
  • 内存管理范围
    • 任何继承NSObject的对象
    • 对其他非对象类型无效(int char float double struct enum 等)

注:
为什么只有OC对象才需要进行内存管理的本质原因 - OC对象存放于堆里面(堆内存系统不会自动释放,需要手动释放) - 非OC对象一般放在栈里面(栈内存会被系统自动回收释放)


堆和栈

  • 栈(操作系统):由操作系统自动分配释放空间,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构中的栈的先进后出
  • 堆(操作系统):一般由程序员分配释放空间,若程序员不释放,程序结束时可能由OS回收,分配方式类似于链表
//这个方法结束后,栈里的变量a、p会被回收,堆里的Person对象还会留在内存中,因为它的引用计数还是1
-(void)doSomething{
	//a:栈
	int a = 10;
	//p:栈
	//Person:堆
	Person *p = [[Person alloc]init];
}

关于iOS内存管理相关知识点