首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >OC 内存管理的基本概念

OC 内存管理的基本概念

作者头像
零式的天空
发布2022-03-28 15:45:09
发布2022-03-28 15:45:09
5250
举报
文章被收录于专栏:零域Blog零域Blog

OC 内存管理的基本概念

1. 内存管理的基本概念

  • 栈区 stack
  • 堆区 heap heap(堆)是最自由的一种内存,它完全由程序来负责内存的管理,包括什么时候申请,什么时候释放,而且对它的使用也没有什么大小的限制。在C/C++中,用alloc系统函数和new申请的内存都存在于heap段中。
  • BSS区 来存放没有被初始化或初始化为0的全局变量,因为是全局变量,所以在程序运行的整个生命周期内都存在于内存中。有趣的是这个段中的变量只占用程序运行时的内存空间,而不占用程序文件的储存空间。
  • 数据区 Data 初始化过的全局变量数据段,该段用来保存初始化了的非0的全局变量,如果全局变量初始化为0,则编译有时会出于优化的考虑,将其放在bss段中。因为也是全局变量,所以在程序运行的整个生命周期内都存在于内存中。与bss段不同的是,data段中的变量既占程序运行时的内存空间,也占程序文件的储存空间。
  • 代码区 text

2. OC内存管理的范围

堆区 中 继承 NSObject对象

内存管理的原理及分类

  • 引用计数
  • ARC or MRC

MRC快速入门

  • +1 alloc new copy
  • -1 release autorelease

内存管理原则

  • 原则 对象有人使用,不回收 使用对象,+1 不使用对象 -1
  • 谁创建, 谁release
  • 谁retain, 谁release
  • 总结 +1 就该-1

内存管理的研究内容:

  1. 野指针
    1. 定义的指针没有初始化(没有指向)
    2. 指向的空间已经被释放 (僵尸对象)
  2. 内存泄漏 栈区指针变量已经被释放,而堆区的空间还没有被释放

单个对象的内存管理(野指针)

僵尸对象

已经被释放的对象,在内存中可能还能继续访问,但容易出

避免使用僵尸对象

对象释放后,将 指针 -> nil

带个对象的内存泄漏

⚠️ 注意 相互持有 、自己调用自己 的情况

代码语言:javascript
复制
[self mothd:self];
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-10-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • OC 内存管理的基本概念
    • 1. 内存管理的基本概念
    • 2. OC内存管理的范围
  • 内存管理的原理及分类
  • MRC快速入门
  • 内存管理原则
  • 单个对象的内存管理(野指针)
    • 僵尸对象
    • 避免使用僵尸对象
    • 带个对象的内存泄漏
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档