OC内存管理


在正式写博客之前,已经把OC基础的部分过了一遍,整体感觉,c和OC还是挺像的,只不过OC有了面向对象这一部分。不过这也不能抵消掉它的执行效率,因为她是在C基础上发展的,所以她的效率应该是很高的。不像JAVA,虽然它可以跨平台,但是这样做毕竟要以牺牲效率为代价。

现在我们进入正题--内存管理 

一为什么要进入内存管理?

1)移动设备的内存极其有限,每个app所能占用的内存是有限制的 。不要说是移动APP要进行内存管理,就是在电脑也需要管理,毕竟内存资源有限啊。

2)如果不进行内存管理,那么app占用内存过大,系统可能会强制关闭app, 造成闪退现象, 影响用户体验。

3)如果不进行内存管理,有可能会面临内存泄漏的问题,其它这在C语言中非常常见,alloc,realloc时,用过之后就是忘了free

二 内存管理涉及的操作

分配内存 : 例如我们来创建一个对象,肯定得为它分配空间
清除内存 : 当我们使用完之后 ,就要把它占用的内存release掉,要不然内存会一点点减少

三 oc内存管理范围

OC内存管理主要是对继承NSOobject 类的对象的管理,基本数据类型是不需要我们进行管理,它由系统进行管理

说到这里就不得不说一下,程序的五个部分,栈区,堆区,NSS区,数据区和代码区,

OC内存管理_第1张图片

如图,除了第二部分,其它部分都是不需要我们自己管理 的。因为我们要分配对象,而对象分配的空间都是在堆区,这也好比我们在C语言中分配空间时一样,它也在堆区中分配。

四 oc内存管理原理

OC对对象进行管理 是通过一个引用计数器来进行管理的。当一个对象增加一个所有者,那么它的引用计数器加一,当一个对象减少一个所有者时,它的引用计数器减一,当引用计数器为0时,就要发送dealloc消息,它就要被给release掉(当然如果在创建对象时,没有给它分配空间,虽然它的retainCount ( - (NSUInteger)retainCount OBJC_ARC_UNAVAILABLE) 是0 ,但不能对他进行释放操作),在OC里面引用计数器是一个 每个对象都有的占用8个字节的retainCount变量。


五 OC内存管理的分类

oc提供三种内存管理的方式

1)MaunualReference Counting( 简称MRC )手动引用计数

2)AutomaticReference Counting(简称ARC) 自动引用计数

IOS是不支持垃圾回收的,在实际开发项目过程中,我们要用ARC,而我们学习MRC就是为了更好 的了解一OC的内存管理机制。以方便我们后来的项目开发。

六 OC内存管理的原则

1)只要对象还被使用,就不能被释放

2)如果一个人想使用这个对象,那么就应该让对象的retainCount 加1

3)如果一个人不想使用这个对象,那么 就应该让对象的retainContt减1

4)坚持谁创建,谁就release

5)  坚持谁retain,谁release

七 OC内存管理研究的内容

1)防止使用野指针,也是XCODE里面说的僵尸指针,可以类比C语言没有指向的指针

它分两种情况,一种是创建它时就没有创建空间 二是创建之后,它的空间又被释放掉了

2)防止内存泄漏

这个应该是个严重的问题,memory leak 的话,系统会认为你一直在使用着,导致这块区域不能再被释放,除非重做系统。


你可能感兴趣的:(objective-c,内存管理)