(一)内存管理
Ø 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
Ø 循环引用就是两个对象相互持有,从而导致两个对象最后都没释放,引起内存泄露。在编写时不会报错,编译时也不会报错。