Protocols and delegates are two related but different concepts:
On the one hand, protocols declare methods that can be implemented by any class. These classes are said to conform to the protocol. They are like interfaces in Java. Protocols can be formal or informal:
On the other hand, delegation is a design pattern by which an object is given an opportunity to react to changes in another object or influence its behaviour. The basic idea is to get two objects to coordinate to solve a problem while minimizing coupling between these two objects and avoiding subclassing. Subclassing creates a tight coupling between the subclass and its superclass whereas delegation creates a much looser relationship based on anonymous objects.
This pattern is typically implemented by the means of a protocol or to put it in another way, a delegate is typically an anonymous object that conforms to a protocol.