美文网首页
OC内存管理

OC内存管理

作者: 自律_自强_通达 | 来源:发表于2018-08-29 14:09 被阅读0次

1、什么是内存管

程序在运行时候,一下行为会增加程序所占内存:

——创建一个对象

——定义一个变量

——调用一个函数或者方法

然而设备内存是有限的,而且每个应用程序所可以占用的内存也是有限的

当程序所占用的内存较多时,系统就会发出内存警告,这时就得回收一些不需要再使用的内存空间。比如回收一些不需要使用的对象、变量等

如果程序占用内存过大,系统可能会强制关闭程序,造成程序崩溃、闪退现象,影响用户体验

所以这个时候需要内存管理来尽量降低内存的使用率来保证程序的正常运行和高效。

任何继承自NSObject 的对象都需要进行内存管理

而其他非继承NSObject对象的数据类型(nt、char、float、double、struct、enum等)则不需要内存管理

非对象不需要内存管理的原因:

原因是这些数据类型存储在栈里面,栈理的数据有系统自动分配释放。

内存管理的机制:引用计数

引用计数器:

每个OC对象都会有一个引用计数器,引用计数器的值是整数,表示对象被引用的次数,即这个对象在多少个地方被使用。

引用计数器的增减:

    给对象发送消息,进行相应的计数器操作。

    Retain消息:使计数器+1,改方法返回对象本身

    Release消息:使计数器-1(并不代表释放对象)

    retainCount消息:获得对象当前的引用计数器值

alloc:当一个类的对象创建,需要开辟内存空间的时候,会使用alloc,alloc是一个类方法,只能用类调用,它的作用是开辟一块新的内存空间,并使这块内存的引用计数从0增加到1,注意,是新的内存空间,每次用类alloc出来的都是一块新的内存空间,与上一次alloc出来的内存空间没有必然联系,而且上一次alloc出来的内存空间仍然存在,不会被释放。

对象的销毁:

    当OC对象的引用计数为0的时候,它将被销毁,其所占用的内存将被系统回收。

    当对象被销毁时,系统会自动向对象发送一条dealloc消息,一般会重写dealloc方法,在此方法里面释放        相关资源,dealloc方法里面必须调用“ [super dealloc]; ”方法,并且在最后调用。一旦对象被销毁,就不能     在使用它之前所占据的空间,坚持使用会造成崩溃(野指针错误)。

内存管理的原则:

1⃣️、一个对象还在就不能被回收。

2⃣️、一个地方使用这个对象,这个对象就引用计数 +1

3⃣️、当你不在使用这个对象的时候,这个对象的引用计数 -1

谁创建,谁release:

1⃣️、如果你通过alloc,new,copy来创建了一个对象,那么你就必须调用release或者autorelease方法

2⃣️、不是你创建的就不用你去负责

谁retain,谁release

只要你调用的retain,那么无论这个对象是什么时候生成的,你都要调用release方法。

2、自动内存管理

内存管理模型

给OC程序员的内存管理模型有三种

(1)自动垃圾手机(iOS环境不支持)

(2)手动引用计数和自动释放池(MRC)

(3)自动引用计数器(ARC)


一、手动内存管理(Manual Reference Counting 简称:MRC)

1、引用计数器

系统会在一个OC对象的引用计数为0时,销毁这个对象并回收其所占内存释放该空间。

当使用alloc ,retain 和 copy 创建一个对象的时候,其默认的引用计数就是1。

2、引用计数器操作

每当创建引用到对象就会给对象发送一个retain消息,使得引用计数+ 1

相关文章

  • 内存管理

    一.内存基本介绍 1、OC内存管理的基本概念 2、OC内存管理的范围​管理范围:管理任何继承自NSObject的对...

  • 内存管理

    目录一、内存分区 1、RAM和ROM 2、内存的五大分区二、内存管理 1、OC内存管理是指什么?OC内存管理的本质...

  • Lesson 0-1 Objective-C basic

    6.OC 手动内存管理 OC 内存管理原则: 只要使用 alloc, new, copy, mutableCopy...

  • OC的内存管理

    1、OC的内存管理 OC是通过引用计数进行内存管理的,其核心思想遵循“谁创建谁释放;谁引用谁管理”。 OC的内存管...

  • iOS之从MRC到ARC内存管理详解

    概述 在iOS中开发中,我们或多或少都听说过内存管理。iOS的内存管理一般指的是OC对象的内存管理,因为OC对象分...

  • iOS五大块知识总结之内存管理

    1.1 管理的原因 只有OC对象才需要管理内存,非OC对象(如:char、int、folat)则不需要管理内存的本...

  • iOS 中堆和栈的区别以及冒泡排序

    在引入堆和栈之前,先要知道,iOS中的内存管理范围: OC对象需要进行内存管理,非oc对象不需要进行内存管理,比如...

  • OC的内存管理

    最近系统地复习了OC的内存管理,所以总结下. OC是通过引用计数(reference count)来管理内存.自...

  • OC关于在MRC模式下的内存管理学习

    内存管理 管理范围 任何继承NSObject的对象 只有OC对象才需要进行内存管理的本质原理 1.OC对象在堆中 ...

  • 《Effective Objective-C 2.0》读书笔记(

    第五章 内存管理 第29条:理解引用计数 OC 中有手动内存管理(MRC) 自动内存管理(ARC)手动内存管理需要...

网友评论

      本文标题:OC内存管理

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