There are two Objects A and B. A creates B and retains it. B has an instance variable that points to A, retaining it. So both retain eachother. Some people say, that this st
A retain cycle can be broken, if you know about it. Usually it leads to nasty bugs (memory leaks). In your example:
A* a = [[A alloc] initAndCreateB];
Now, a unnamed B instance (created by A) has a retain count of 1. Since we hold a reference to A and the anonymous B instance holds a strong reference to A, A's retain count is 2.
Let's say, we are done using A:
[a release];
return 12;
Now, A's retain count is 1. It will not be released, it's memory is lost. That's why retain cycles are bad.