OC学习之路(8) - 内存管理(MRC和ARC)

(一)内存管理

Ø OC中创建的对象保存在内存的堆区,堆区内存的开辟和释放是要进行管理的,OC有两种管理内存的方式:手动管理(MRC)和自动管理(ARC)

Ø RetainCount:引用计数

Ø 手动管理(MRC):所谓手动管理就是由编写者自己去负责开辟空间和释放内存空间,管理内存的关键字:alloc, retain, copy, mutableCopy, release, autorelease

Ø 黄金法则:对于一个对象使用了alloc, retain, copy, mutableCopy,那么一定要对应使用release, autorelease

(二)@property关键字

1.   @property关键字的作用:自动为属性生成get/set方法

2.   @property中的参数(MRC下):

其中参数主要分为三类:

参数

默认值

取值范围

读写属性

readwrite

readwrite、readonly

setter语义

assign

assign、retain、copy

原子性(是否上同步锁)

natomicity

natomicity、nonatomicity

Øretain: 只能使用在MRC模式下. 当属性的类型是1个OC对象的时候,除了循环引用之外,全部都是使用retain。

Øassign: 既可以用在MRC中,也可以用在ARC之中, 在MRC模式中和ARC模式下. 当属性的类型是1个非OC对象类型的时候. 使用assign在MRC模式下,如果出现循环引用. 一端使用retain 一端使用assign

Østrong: 只能使用在ARC模式下,当属性的类型是1个OC对象的时候,除了循环引用之外,全部都是使用strong

Øweak: 只能使用在ARC模式下,当出现循环引用的时候. 一端使用strong 一端使用weak

Øreadwrite: 可以使用在ARC模式和MRC模式下,代表同时生成属性的getter、setter

Øreadonly: 可以使用在ARC模式和MRC模式下 代表只成属性的getter

Ø修改生成的getter setter的名字: 在ARC和MRC中都可以使用.

Ø@property参数: 在MRC中使用retain的 用strong来代替就可以了.

 

(三)ARC

Ø  ARC(自动应用计数),是iOS5所引入的管理内存的技术

Ø  使用ARC非常简单,只需要像往常那样编写代码,只不过永不写retain、release和autorelease三个关键字。当ARC开启时,编译器将自动在代码合适的地方插入retain、release、autorelease

Ø  ARC的一个管理规则:只要某个对象被任一strong指针指向,那么它将不会被销毁,如果对象没有被任何strong指针指向,那么就将被销毁

 

 

(四)strong、weak关键字

Ø  __strong强引用:强引用指向对象后就会持有了这个对象(相当于MRC中的retain),这个对象的引用计数+1。默认的引用都是强引用。

Ø  __weak弱引用:不会持有对象(相当于assign),引用计数不会+1

Ø  循环引用就是两个对象相互持有,从而导致两个对象最后都没释放,引起内存泄露。在编写时不会报错,编译时也不会报错。

你可能感兴趣的:(oc,内存管理MRC和ARC)