iOS —— 简述OC 的内存管理机制

本文详细介绍了iOS中的内存管理机制,包括概念、内存管理原则、手动内存计数(MRC)和自动引用计数(ARC)。强调了引用计数在对象生命周期中的作用,以及在MRC下内存管理的代码规范。还讨论了ARC中strong和weak属性的区别,以及autorelease的工作原理和使用注意事项。
摘要由CSDN通过智能技术生成

关于OC 的内存管理有很多模糊的地方,下面我们一一说起
首先概念性问题

概念

为什么进行内存管理
由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等。

内存管理类型: OC 类型

基本类型和C语言的类型:如:
int,short,char,struct,enum,union等类型
OC类型:任何继承于NSObject对象都属于OC的类型。

我们讲的内存管理实际上是对OC类型的内存管理,它对基本数据类型和C语言的类型并不管用。

原因: 因为对象和其他数据类型在系统中的存储空间不一样,其它局部变量主要存放于栈中,而对象存储于堆中,当代码块结束时这个代码块中涉及的所有局部变量会被回收,指向对象的指针也被回收,此时对象已经没有指针指向,但依然存在于内存中,造成内存泄露。

对象的基本结构

每个OC对象都有自己的引用计数器,是一个整数表示对象被引用的次数,即现在有多少东西在使用这个对象。对象刚被创建时,默认计数器值为1,当计数器的值变为0时,则对象销毁。
在每个OC对象内部,都专门有4个字节的存储空间来存储引用计数器。

管理方法

Objective-C的内存管理主要有三种方式ARC(自动内存计数)手动内存计数内存池.

引用计数器的作用

判断对象要不要回收的唯一依据就是计数器是否为0,若不为0则存在。

对象的销毁

当一个对象的引用计数器为0时,那么它将被销毁,其占用的内存被系统回收。

当对象被销毁时,系统会自动向对象发送一条dealloc消息,一般会重写dealloc方法,在这里释放相关的资源,dealloc就像是对象的“临终遗言”。一旦重写了dealloc方法就必须调用[super dealloc],并且放在代码块的最后调用(不能直接调用dealloc方法)。

一旦对象被回收了,那么他所占据的存储空间就不再可用,坚持使用会导致程序崩溃(野指针错误)。

内存管理原则

OC使用了一种叫做引用计数的机制来管理对象,如果对一个对象使用了alloc、[Mutable]copy,retain,那么你必须使用相应的realease或者autorelease。

也可以理解为自己生成的对象,自己持有。
非自己生成的对象,自己也能持有。
不在需要自己持有的对象时释放。
非自己持有的对象自己无法释放。
生成并持有对象,持有对象,释放对象,废弃对象。

MRC 手动内存计数

(Reference Counted)手动内存计数:就是说,从一段内存被申请之后,就存在一个变量用于保存这段内

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值