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的代理对象]

  • 相关阅读:
    HDU 4864 Task(经典贪心)
    51Nod
    POJ 3122 Pie(二分+贪心)
    HDU 1053 Entropy(哈夫曼编码 贪心+优先队列)
    POJ 1328 Radar Installation(很新颖的贪心,区间贪心)
    11572
    HDU 1789 Doing Homework again(非常经典的贪心)
    合并果子(贪心+优先队列)
    CSU-ACM2018暑假集训6—BFS
    HDU 2102 A计划(两层地图加时间限制加传送门的bfs)
  • 原文地址:https://www.cnblogs.com/aunty/p/5118373.html
Copyright © 2011-2022 走看看