zoukankan      html  css  js  c++  java
  • iOS 的 Protocol 协议的使用

    protocol -->用来声明方法. 用来存储一系列方法的声明.只是一个.h文件

    任何类只要遵守了protocol,就相当于拥有了protocol的全部方法的声明.

    @protocol GMProtocol <NSObject>

    @required  //必须实现,如果不写就默认是required.如果不实现仅是会弹出警告.(因为是OC是弱语法)

    - (void) read;

    @optional //可选

    - (void) write;

    @end

    让学生类遵守GMProtocol的协议;

    @interface Student : NSObject <GMProtocol>

    @end

    @implementdation Student

    - (void) read { NSLog(@"read"); }

    - (void) write { NSLog(@"write"); }

    @end

    作用:

    1. 包含很多方法的声明.

    2. 可以将很多类公共的方法的声明抽取到一个协议中,让每个类遵守协议即可.

    使用场景:

    1. 限定变量指向的对象

    要求变量d指向的对象必须遵守PlayProtocol协议

    id<PlayProtocol> d = [[Person alloc] init]; //如果Person没有遵守PlayProtocol协议会警告

    @interface Person: NSObject <PlayProtocol>  //如果Person遵守PlayProtocol协议则OK

    @end

    2. 限定属性是具有某些协议的

    @property (nonatomic, strong) Dog<PlayProtocol> * dog;

    @interface Dog : NSObject <PlayProtocol>

    补充:

    设计模式./-->是一种手段,一种工具.可以使代码的写起来更方便
    1. 代理设计模式(委托设计模式)

    <1>. 监听器的场合

      对象B(保姆)想监听对象A(婴儿)的一些行为

    <2>. 通知的场合

      对象A(婴儿)发生了一些行为,想通知B(保姆)[B(保姆)为代理对象]

    <3>. 有些事情,不想自己处理,可以交给别人处理

      对象婴儿发生了一些事情,不想自己处理,交给保姆处理

    2. 代理设计模式的使用场合

      当对象A发生了一些行为,想告知对象B-->[让对象B成为对象A的代理对象]

      对象B想监听对象A的一些行为-->[让对象B成为对象A的代理对象]

      当对象A无法处理某些行为的时候,想让对象B帮忙处理-->[让对象B成为对象A的代理对象]

  • 相关阅读:
    看完让你彻底搞懂Websocket原理
    将map中的value赋值给list,list改变为什么会引起map也变呢?
    eclipse创建maven 3.1版本maven项目
    eclipse 集成mybatis-generator 生成mybatis 文件
    IDEA错误:Cannot start compilation: the output path is not specified for module "XXX".
    IDEA内存优化(秒开的快感!!)
    实体类反向生成数据库表SQL
    基于idea新建maven项目并发布tomcat
    Netty概念之 Future 和 Promise
    Java检测死锁之ThreadMXBean
  • 原文地址:https://www.cnblogs.com/aunty/p/5118373.html
Copyright © 2011-2022 走看看