Ios面试复习--ARC内存管理

2017-12-06  本文已影响0人  金克拉拉拉拉

ARC是编译器特性(LLVM3.0编译器),不是运行时特性,和垃圾回收有本质的区别

Automatic Reference Counting 自动引用计数 当ARC开启时,编译器会自动在合适的地方加入retain release autorelease 关键字

0.ARC的判断准则

只要没有强指针指向对象,对象就会被释放(在ARC下,暂时忘记引用计数)

1.ARC下的释放准则

只要还有一个强指针指向对象,对象就会保存在内存中

强指针指向对象

既 可以通过

--1.可以通过给指针赋值nil 

或者

--2.将当前引用该实例对象的强指针通过__weak 修饰成弱指针 (弱指针在指向对象被销毁后,自动将该指针至为nil )

达到释放指针所指向的实例对象的目的

2.强指针

--1.默认所有指针变量都是强指针 

默认情况下所有的指针都是强指针

--2.被__strong 修饰的指针

被__strong 修饰的指针

3.弱指针

--1.被__weak 修饰的指针

弱指针

弱指针的极端使用场景,当场释放,因为alloc 在堆中,栈中的p是弱指针,根据ARC准则:一个实例对象只要没有强指针引用就会被释放

无论是strong 还是weak 类型的指针 都不在会指向一个僵尸对象,会被至为nil 从根源上解决了意外释放导致的carsh

5.ARC下@property参数

strong 用于OC对象,相当于MRC中的Retain,不同的是,在strong 指针指向的对象 被释放时,该指针会自动至为nil 防止carsh

weak 用于OC对象,相当于MRC中的assign的使用技巧,但是weak 指针指向的对象被释放后,会自动至为nil

assign 用于基本数据类型,和MRC中的assign相同,用于修饰基本数据类型,若使用其指向对象,在对象被释放后,指针则会变成野指针(指向被释放的僵尸对象),再次调用会导致carsh

6.ARC中的循环引用

和MRC中类似 原理

在ARC中处理循环引用 需要将其中一个引用改为 weak 修饰词 其中assign 用来专门修饰基本数据类型,修饰对象建议使用weak


上一篇下一篇

猜你喜欢

热点阅读