object-C 内存管理

2019-02-14  本文已影响0人  瓊胖子

程序内存使用情况:

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

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

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

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

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

内存泄露:

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

悬挂指针:

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

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

ARC限制

ARC限制.png

ARC生命周期限定符

ARC生命周期限定符.jpg
上一篇下一篇

猜你喜欢

热点阅读