iOS 循环引用

作者: 飞不越疯人院 | 来源:发表于2019-04-17 11:14 被阅读2次

    1. 循环应用的分类:

    • 自循环引用;
    • 相互循环引用;
    • 多循环引用;
    自循环引用:

    一个对象中有一个成员变量A; 如果给A赋值这个对象的元对象则会造成自循环引用;

    相互循环引用

    类似delegate中不用weak修饰,而是用strong修饰; 会造成相互引用;

    多循环引用

    类似相互循环引用只不过这个是多个对象(A->B->C->D->E->A);


    2. 如何破处循环引用?

    • 开发中尽量避免循环引用;
    • 合适的时机手动断开循环引用;

    具体方案:

      1. __weak

    日常开发中的delegate使用方法;

      1. __block

    MRC__block修饰的对象不会增加其引用计数,从而避免循环引用
    ARC__block修饰的对象会被强引用, 无法避免循环引用, 需要手动解除引用;

      1. __unsafe_unretained

    修饰的对象不会增加其引用计数,从而能避免循环引用; 但是被修饰的对象释放后不会被置为nil,变成了野指针(区别于weak);


    3. 循环应用的示例

    1. NSTimer
    2. Block
    3. delegate

    相关文章

      网友评论

        本文标题:iOS 循环引用

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