OC内存管理--MRC&ARC
MRC
@property在内存管理中的作用:
可以控制set方法的内存管理
1> retain:release旧值,retain1新值(用于OC对象);
2> assign:直接赋值,不做任何内存管理(默认,用于非OC对象类型);
3> copy:release旧值,retain新值(一般用于NSString *)。
控制需不需要生成set方法
1> readwrite:同时生成set和get方法(默认);
2> readonly:只生成get方法;
多线程管理
1> atomic:性能低(默认);
2> nonatomic:性能高
ARC
下面介绍ARC机制下的内存管理方法。首先,要了解autorelease。
autorelease方法的基本使用:
1> 给对象发送一条autorelease消息,会将对象放到一个自动释放池(autoreleasepool)中;
2> 当自动释放池被销毁时,会对池子里面的所有对象做一次release操作;
3> 会返回对象本身;
4> 调用完autorelease方法后,对象的计数器不变。
ARC的实现细节:
编译器会自动在适当地地方插入适当的retain、release、autorelease等语句;也就是说,编译器会自动生成内存管理的代码,不用程序员手动编写。
ARC注意点:
1、ARC是编译器特性,而不是运行时特性;
2、ARC不是其他语言中的垃圾回收,有着本质的区别。
ARC的判断原则:只要还有一个强指针变量指向对象,对象就会保持在内存中。
强指针:默认所有的指针变量都是强指针;被_strong修饰的指针。
弱指针:被_weak修饰的指针。
ARC使用细节:
不能调用release、retain、autorelease、retainCount
可以重写dealloc,但是不能调用[super dealloc]; |
|