协议(Protocol)类似Java中的接口,它是一个功能方法的集合。协议本身不是一个类,不能自己实现协议里的方法,而是委托其他类去实现。通常用来实现委托代理设计模式,实现不同类对象之间的时间消息通信。协议中的方法默认都是@required,即使用该协议的类必须实现协议里的这些方法。开发者也可以使用@optional来选择性地实现某个方法。
代理(Delegate)是一种设计模式,在Objective-C中通过协议(Protocol)来实现。可以使一个对象在特定时刻通知其他类的对象去实现任务,不需要获取那些对象的指针,实现不同对象之间的通行。