Object-C之手动内存管理

在X-Code 4.4之后,苹果推出了ARC(Automatic Reference Counting),但是在之前的老版本中都是MRC(Mannul Reference Counting),今天来简单介绍一下MRC的一些基本内容:

一、对象的属性方法

1.每新增一个指针指向一个对象时,调用[对象名 retain];此举是先给对象的reatinCount值+1,再执行指针指向该对象。

2.每减少一个指针指向一个对象时,调用[对象名 release];此举是先给对象的reatinCount值-1,再执行指针移除指向该对象。

3.调用retainCount时,会返回当前该对象的指针指向数量。

二、基本规则:

1.当对象的retainCount=0时,会自动执行对象的私有方法dealloc方法。该方法可以自定义重写,但是在方法的“最后”(一定是最后面哦,就是紧贴方法结束的大括号的位置)写上[super dealloc];此举目的是最后也要让父类执行dealloc对象的方法,彻底释放该对象所占据的全部内存空间。

2.写代码时,某个对象写了多少个retain,就应该写多少个release,应该是一一匹配的关系。

3.遵循谁用谁retain,谁不用谁release原则。初始创建时默认retainCount+1,不用手写retain。

4.对象不用释放后,应把指向该对象的指针设置成nil/NULL,(OC对象nil,C指针NULL)。

5.当指针无指向时,调用指针类型的方法,编译器不会报错,运行时会跳过该命令不执行。但如果访问属性,则会报错。

三、衍生概念:

1.野指针的两种情况:第一、指针未初始化时,指向的是一块随机的内存空间。第二、指向对象的指针指向的空间被提前释放。

2.僵尸对象:当一个对象被释放后,系统还未处理分配该对象原来的内存空间时,原来指向该对象的指针还可以对该内存空间进行操作的情况,此种情况非常危险,应避免。一般黑客或泄露信息等情况都可通过操作指针获取内存中的信息。

你可能感兴趣的:(Object-C小知识,objective-c)