object-C 内存管理

瓊胖子IP属地: 陕西
字数 817

程序内存使用情况:

object-C可执行的程序是由(可执行)代码、初始化代码和未初始化的程序数据、链接信息、重定位信息、举报数据和动态数据构成。
1、程序数据包括以静态方式声明的变量和程序常量(即在程序编译时在代码中设置的常数)。
2、可执行代码、程序数据已经链接与重定位信息会议静态方式被分配内存,并在程序的声明周期中一直存在。
3、局部(自动)数据在语句中声明并且仅在该语句块中有效,当该语句块执行后局部数据不会继续存在

{
 int a=1;
 NSLog(@"%d",a);
}

a为局部变量,只存在于这个语句块中,执行完语句将不会存在。
自动数据被存储在程序的栈中,程序栈通常是执行程序、线程前舍得尺寸的内存段。栈用于存储局部变量和调用方式、函数上下文数据包括方法的输入参数、返回值,已经调用完方法后继续执行程序的代码地址。操作系统会自动管理哲学内存,这些数据会获得栈中的内存,而且分配给这些书的内存会在他们失效和被释放。

在运行时中通过NSobject类的alloc方法创建的对象存储在动态分配的内存及堆内存中。以动态方式创建对象就意味着需要进行内存管理,因为在堆内存中创建的对象永远不会超出其作用范围。(这就是为什么谁创建谁release)。

程序的栈尺寸(通常)是在程序启动时确定的,会自动由系统管理。另一方面,OC中对象在程序执行时动态创建的,不会自动由系统收回,因此需要程序必须进行内存管理,以确保通过恰当的方式使用系统内存,不进行内存管理或错误内存管理会导致以下结果:

内存泄露:

如果程序没有释放不在使用的的对象就会出现该问题。如果程序诶呦使用为其分配的内存,就会浪费内存资源;如果系统机械为程序分配内存并没有是非这些内存,程序最终会耗尽系统内存。

悬挂指针:

如果程序释放了仍在使用的对象(野指针),就会到账该问题。如果将来的程序尝试访问这些对象就会出现程序错误。

OC的内存管理是通过引用计数实现的,引用计数是一种通过对象唯一引用,确定对象是否正在被使用的技术。如果对象的引用计数降到了0,对象就会被视为不在有用,而且运行时系统会释放它的内存。

ARC限制

ARC限制.png

ARC生命周期限定符

ARC生命周期限定符.jpg
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
0人点赞
瓊胖子迈开脚步,再长的路也不在话下;停滞不前,再短的路也难以到达。
总资产2共写了1.4W字获得22个赞共1个粉丝

推荐阅读更多精彩内容

  • 1. 基础知识 1.1、 基本概念、 功能 冯诺伊曼体系结构1、计算机处理的数据和指令一律用二进制数表示2、顺序执...
    yunpiao阅读 5,474评论 1 22
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,161评论 1 32
  • 一、引用计数器和对象所有权的基本概念 1、引用计数器 每个对象都会有一个引用计数器,当引用计数器为0是,系统就会将...
    空白Null阅读 371评论 0 1
  • 用功能式把应用搭建起来 在看了文件结构后,要把项目的框体搭建起来。 以下是各文件内容 datatube/datat...
    chan2017阅读 141评论 0 0
  • Python 第一步: 第二步: 第三步: 第四步: 第五步: 第六步: 第七步安装pip
    Louis_Duan阅读 1,403评论 0 0