Delegates are now the de-facto way for two objects to communicate. Delegation is good, because it ostensibly reduces coupling. An object which has a delegate can work with any object that implements the protocol. But this has led to a situation where delegate protocols are being over-relied upon. It has been used in places where coupling is unavoidable, or whether other, simpler mechanisms are available. Some protocols are also being defined before the functional requirements are even understood, leading to overly verbose protocols with methods that aren't used.
The primary case for delegation is when an object of one class needs support from an additional object to do its work successfully. The word "delegate" was originally meant specifically for this case. The first object, the delegator, uses the delegate to make decisions which the delegator can't make itself.
If you create a delegate protocol where none of the methods actually involves delegating responsibi