 <p>You wouldn't retain ClassA in ClassB, because ClassA already owns ClassB and it's assumed that when ClassA is deallocated, it will take care of cleaning up any references in ClassB.</p> <p>If you followed the "normal" rules of ownership and retained ClassA when setting the delegate method in ClassB, you'd end up with a retain loop where neither objects would ever be deallocated. Instead, you should be using a weak reference exactly like you are.</p>