A delegate is a weak reference to another class based on a protocol. Delegates are usually used to “report back” to another object after completing a task, without tying yourself to a specific class or knowing about all of its details.