A parent object should own a child object. The parent can directly call a method on a child. The child object shouldn't really know about the parent. Hence, it uses a callback/delegate/protocol.
Callbacks are a mess if there isn't a clear parent to child relationship.