Search code examples
objective-cxcodeautomatic-ref-countingretain-cycle

Retain Cycle in ARC


I have never worked on non ARC based project. I just came across a zombie on my ARC based project. I found it was because of retain cycle.I am just wondering what is a retain cycle.Can

Could you give me an example for retain cycle?


Solution

  • A retain cycle is a situation when object A retains object B, and object B retains object A at the same time*. Here is an example:

    @class Child;
    @interface Parent : NSObject {
        Child *child; // Instance variables are implicitly __strong
    }
    @end
    @interface Child : NSObject {
        Parent *parent;
    }
    @end
    

    You can fix a retain cycle in ARC by using __weak variables or weak properties for your "back links", i.e. links to direct or indirect parents in an object hierarchy:

    @class Child;
    @interface Parent : NSObject {
        Child *child;
    }
    @end
    @interface Child : NSObject {
        __weak Parent *parent;
    }
    @end
    


    * This is the most primitive form of a retain cycle; there may be a long chain of objects that retain each other in a circle.