美文网首页
object-C 内存管理

object-C 内存管理

作者: 瓊胖子 | 来源:发表于2019-02-14 22:50 被阅读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

相关文章

  • 内存管理初探

    一、概览 1.什么是内存管理 内存管理是在程序运行时,分配内存空间的过程。在Object-C当中,内存管理可以被看...

  • Swift引用计数管理一

    Swift源码之引用计数管理一 标识Object-C或者Swift的内存管理标志类typedef unsigned...

  • Swift中解决引用循环之Unowned 与 Weak的选择

    Swift的内存管理机制与Object-C一样,都是采用了自动内存管理 -- ARC。那么这样就不得不想到老生常谈...

  • Object-C内存管理

    一、引用计数器和对象所有权的基本概念 1、引用计数器 每个对象都会有一个引用计数器,当引用计数器为0是,系统就会将...

  • object-C 内存管理

    程序内存使用情况: object-C可执行的程序是由(可执行)代码、初始化代码和未初始化的程序数据、链接信息、重定...

  • Object-C内存管理

    一.内存布局 如上图,内存布局共分为如下几个区: 内核:由系统控制处理的,大概有占有1个GB 栈:函数、方法、局部...

  • Object-C 内存管理

    一基本原理 Objective-C的内存管理机制与.Net/Java那种全自动的垃圾回收机制是不同的,它本质上还是...

  • ios面试2

    62.谈谈Object-C的内存管理方式及过程? 答: 1).当你使用new,alloc和copy方法创建一个对象...

  • iOS面试题-第十四页

    62.谈谈Object-C的内存管理方式及过程? 答: 1).当你使用new,alloc和copy方法创建一个对象...

  • 浅谈Object-C的内存管理

    在运行程序的过程中,需要创建大量的对象。对象从创建出来、使用之后,就需要对内存中的对象进行释放,不然内存中的...

网友评论

      本文标题:object-C 内存管理

      本文链接:https://www.haomeiwen.com/subject/wfvjeqtx.html