iOS 协议

一、介绍

  协议是一组预定义的方法,一个类可以选择来实现它们。

  当对象需要与一个或多个对象对话,但是不知道对象的类时,协议特别有用。

  Objective-C中的协议相当于Java中的接口。

  协议在整个Cocoa框架中使用。Objective-C拥有正式的和非正式的协议。正式的协议声明了一组必需的方法,可能还有某些可选的方法。随后,类可以通过实现协议所必需的所有方法来实现该协议。当一个类声明它使用的正式协议时,编译器会检查,确保该类实现了协议所有必需的方法。非正式协议则只是在一个子类头文件中的一个方法声明的列表,一个类可以选择来实现这些方法。

二、使用

  >采用一个协议的类,必须实现协议的所有必须的方法

  >采用一个协议的类,可以自由的实现或不实现协议的任何可选方法

    

  >类可以实现多个协议,协议也可以实现协议

  >可选和必需的方法分别使用@optional 和 @required指令来标记

  >类通过在类的@interface 行的超类名称之后的一个尖括号中放置字而已的名称,从而声明其采用了该协议。包含了协议声明的头文件,对于采用协议的类的@interface部分,必须是可见的

    

三、iOS中消息传递模式

  通知:在iOS中由通知中心进行消息接受和消息广播,是一种一对多

  代理:是一种通用的代理模式,iOS中对代理支持的很好,由代理对象,委托者,协议三部分组成

  block:一种回调方法,可将毁掉代码直接写在block代码块中

  target action:通过将对象传递到另一个类中,在另一个类中将该对象作为target的方法来调用该对象方法,从内存角度看与代理类似

  KVO:NSObject的Category -NSKeyValueObserving,通过属性监听的方式来监测某一个值的变化,当值发生变化时调用KVO回调方法

四、代理设计模式

  代理的基础使用:

    代理是一种通用的设计模式,在iOS中代理模式支持的很好,有特定的语法来实现代理模式,OC语言可以通过@protocol实现协议

    代理由三部分组成:

      协议:用来制定代理双方可以做什么,必须做什么

      代理:根据指定的协议,完成委托方需要实现的功能

      委托:根据指定的协议,制定代理去完成什么功能

     

    在委托方调用代理方法时都需做一个判断,判断代理是否实现当前方法,否则程序崩溃

        

    代理对象只能是弱引用 

    

五、链接

   http://my.oschina.net/u/2472425/blog/649179

   http://my.oschina.net/zboy/blog/493104

    

原文地址:https://www.cnblogs.com/roxy/p/5687932.html