Delegation (using a weak link) is a great way to represent communication with the controller. However, your opinion should not know that it is related to the controller. The view should only know that there is some kind of object that implements its delegate protocol and does not need to move the controller hierarchy or uses any attributes of its delegate that are not defined in the delegate protocol.
This allows views to remain very loosely connected to their controllers. You should be able to switch which object acts as the delegate of the view, or change which controller represents this view, without even changing the view itself.
Jonah source share