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

  • 相关阅读:
    PAT (Basic Level) Practise 1013 数素数
    PAT (Basic Level) Practise 1014 福尔摩斯的约会
    codeforces 814B.An express train to reveries 解题报告
    KMP算法
    rsync工具
    codeforces 777C.Alyona and Spreadsheet 解题报告
    codeforces 798C.Mike and gcd problem 解题报告
    nginx + tomcat多实例
    MongoDB副本集
    指针的艺术(转载)
  • 原文地址:https://www.cnblogs.com/aunty/p/5118373.html
Copyright © 2011-2022 走看看