OC内存管理(ARC)

1.什么是ARC

 Automatic Reference Counting,自动引用计数,即ARC,可以说是WWDC2011和iOS5所引入 的最大的变革和最激动人心的变化。ARC是新的LLVM 3.0编译器的一项特性,使用ARC,可以说一 举解决了广大iOS开发者所憎恨的手动内存管理的麻烦。

 在工程中使用ARC非常简单:只需要像往常那样编写代码,只不过永远不写retain,release和 autorelease三个关键字就好~这是ARC的基本原则。当ARC开启时,编译器将自动在代码合适的地方插入retain, release和autorelease,而作为 开发者,完全不需要担心编译器会做错(除非开发者自己错用ARC了)。ARC与其他语言的”垃圾回收”机制不同。ARC:是编译器特性;“垃圾回收”运行时特性,OC没有垃圾回收.

 

 2.ARC工作原理

    当一个对象没有强指针指向的时候,就会被回收

    强指针:默认所有的指针都是强指针,也可以使用修饰符__strong来声明强指针

    弱指针:被__weak修饰的指针都是弱指针

1  #import <Foundation/Foundation.h>
2  @class Car;
3  
4  @interface Person : NSObject
5  
6  @property(nonatomic,strong,readwrite)Car *car;
7  
8  @end
 1  #import "Person.h"
 2  
 3  @implementation Person
 4  
 5  - (void)dealloc{
 6  
 7  NSLog(@"Person dealloc");
 8  }
 9  
10  @end
1 #import <Foundation/Foundation.h>
2  @class Person;
3  
4  @interface Car : NSObject
5  
6  @property(nonatomic,weak,readwrite)Person *owner;
7  //@property(nonatomic,assign,readwrite)Person *owner;
8  
9  @end
 1 #import "Car.h"
 2  
 3  @implementation Car
 4  
 5  - (void)dealloc{
 6  
 7  NSLog(@"Car dealloc");
 8  
 9  }
10  
11  @end

ARC下的@property参数

 原子性 :

         atomic 对属性加锁,多线程下线程安全,默认方式

         noatomic 对属性不加锁,多线程下不安全,但是速度快 

读写属性:  

         readwrite 生成set、get方法,默认方式

         readonly 只生成get方法

  强弱指针:

         strong 适用于OC对象,相当于MRC的retain,成员变量是强指针

         weak   适用于非OC对象,相当于MRC的assign,成员变量是弱指针

  set方法处理:

         assign 直接赋值,与MRC一样,但是在ARC下默认不是assign,而是strong

 set、get方法命名:

         setter = set方法名:(这里的冒号不可以忘记) | getter = get方法名

  

需要注意的是;

    在ARC下,我们不能在使用release、retain等等计数器操作,可以重写dealloc方法,但是不能在dealloc方法中调用[super dealloc]方法.

posted on 2015-07-15 19:04  lizzie8023  阅读(183)  评论(0编辑  收藏  举报