ARC是苹果公司在iOS4.3之后才出现的内存管理机制,全名为: ARC(Automatic Reference Counting)。简单地说,就是代码中自动加入了retain/release,原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成了。但其又有别于java,c#的自动垃圾回收机制。甚至在本人理解中,觉得ARC更优于JVM一些。
在ARC中又引入了两个关键字:strong,weak,
强指针:strong,对应手动内存管理的retain关键字
@property(nonatomic,strong)NSString * name;
弱指针:weak,对应手动内存管理的assign关键字,
@property(nonatomic,strong)NSString * card;
当然,也不是说在ARC模式下,assign关键字完全被weak取代,在基本数据类型中,我们还是需要使用到assign,而strong,weak一定都是应用在对象类型变量上。
@property(nonatomic,assign)int age;
总结:
1.只要有强指针(strong)指向一个对象,那么系统就不会回收该对象
2.只要没有强指针(strong)指向一个对象,系统立即回收该对象。(这就是ARC与JVM的区别,JVM是一种分配机制,当内存没有压力的时候,是不会回收对象)
3.弱指针(weak)不影响对象被回收
4.默认情况下,所有的指针都是强指针类型的。
注意:
- 1.代码中不能再手动调用 retain, release, retain, autorelease
- 2.不重载dealloc方法,但是如果是释放对象内存以外的处理,是可以重写该函数的,但是不能调用[super dealloc]
- 3.不能使用NSAllocateObject, NSDeallocateObject
- 4. id与void *间的如果cast时需要用特定的方法(__bridge关键字)
- 5.不能使用NSAutoReleasePool、而需要@autoreleasepool块
- 6.不能使用“new”开始的属性名称 (如果使用会有下面的编译错误”Property’s synthesized getter follows Cocoa naming convention for returning ‘owned’ objects”