美文网首页
Ios面试复习--ARC内存管理

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

作者: 金克拉拉拉拉 | 来源:发表于2017-12-06 02:45 被阅读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


    相关文章

      网友评论

          本文标题:Ios面试复习--ARC内存管理

          本文链接:https://www.haomeiwen.com/subject/tjohixtx.html