ARC下的内存管理机制

(一)ARC的判断准则:

  只要没有强指针指向对象,对象就会被释放。

(二)指针分类:

(1)强指针:默认的情况下,所有的指针都是强指针,关键字strong

(2)弱指针:_ _weak关键字修饰的指针

  声明一个弱指针如下:

  _ _weak Person *p;

  ARC中,只要弱指针指向的对象不在了,就直接把弱指针做清空操作。

  _ _weak Person *p=[[Person alloc]  init];//不合理,对象一创建出来就被释放掉,对象释放掉后,ARC把指针自动清零。

  ARC中在property处不再使用retain,而是使用strong,在dealloc中不需要再[super dealloc]。

  @property(nonatomic,strong)Dog *dog;// 意味着生成的成员变量_dog是一个强指针,相当于以前的retain。

  如果换成是弱指针,则换成weak,不需要加_ _。

 

(三)ARC的特点总结:

(1)不允许调用release,retain,retainCount 

(2)不允许重写dealloc,但是不允许调用[super dealloc]

(3)@property的参数:

  Strong:相当于原来的retain(适用于OC对象类型),成员变量是强指针

  Weak:相当于原来的assign,(适用于oc对象类型),成员变量是弱指针

  Assign:适用于非OC对象类型(基础类型)

(四)补充

  让程序兼容ARC和非ARC部分。转变为非ARC  -fno-objc-arc  转变为ARC的, -f-objc-arc 。

  ARC也需要考虑循环引用问题:一端使用retain,另一端使用assign。

  030114208307448.png

  提示:字符串是特殊的对象,但不需要使用release手动释放,这种字符串对象默认就是autorelease的,不用额外的去管内存。

原文地址:https://www.cnblogs.com/kongweiiwei/p/4622811.html