美文网首页
delegate - 代理基础- 03

delegate - 代理基础- 03

作者: js_huh | 来源:发表于2020-07-25 11:04 被阅读0次
  • 为什么系统的代理协议的方法 要把代理本身作为参数传进来?
    • 如: 系统的UIScrollViewDelegate代理协议,
      就有很多方法是将代理本身(UIScrollView),做为方法的参数传入。
      如: - (void)scrollViewDidScroll:(UIScrollView *)scrollView;
    • 问 : 系统这样设计,有什么好处呢?
    • 假设, 有2个UIScrollView,设置代理对象为同一个,且遵循了协议。
      @interface ViewController ()<UIScrollViewDelegate>
      scrollView.delegate = self; scrollTwo.delegate = self;
      想知道,2个UIScrollView 滚动时到底滚动的是哪一个UIScrollView?
    • UIScrollView的每次滚动,都会调用代理协议的-scrollViewDidScroll:方法.
    • 如果在代理协议UIScrollViewDelegate的方法声明里,不传入代理本身,是根本无法知道,到底是scrollView 还是scrollTwo

  • 协议里的方法声明,一般要用@optional来修饰
    • @optional修饰的方法,可实现也可不实现.
    • 协议的方法声明,默认是@required(必须实现)
      一个协议一般有很多方法声明,在遵守协议的代理方,并不需要实现所有方法.
    • 既然建议选择@optional,那么委托方在调用代理协议的方法A时,要判断代理方是否实现方法A。
      respondsToSelector:
      否则报错 NSInvalidArgumentException

  • 代理的使用范围
    • 一个对象,一般只能设置一个代理。
      假设这个对象只有一个代理属性的情况下。
    • 一个对象,能够成为多个对象的代理。
      VC是自UITableViewDataSource,也是UIScrollViewDelegate的代理
      @interface ViewController ()<UITableViewDataSource,UITableViewDelegate>
         
       -- 设置代理对象
      self.tableView.dataSource = self;
      self.tableView.delegate = self;
      

  • 命名规范:
    代理协议, 类名+Delegate;
    代理方法, 以类名开头

  • 通知和代理的选择
    • 代理: 1个对象只能告诉,另外1个对象发生了什么事。
    • 通知: 1个对象能告诉N个对象发生了什么事。
          1个对象能知道N个对象发生了什么事。
    • 通知比较简单,但是容易出错。
      如, "通知名"拼写错误,在编译时不会有任何提示,运行时才会报错。
    • 代理比较规范,但有些麻烦。
    • 代理和通知都能完成,对象和对象之间的通信!
      但是能用"代理"就不用"通知"

也可以看看


来自于哪里?

  • iOS-MJ-UI基础-大神班/临散知识点/delegate-代理基础-03

相关文章

  • delegate - 代理基础- 03

    为什么系统的代理协议的方法 要把代理本身作为参数传进来?如: 系统的UIScrollViewDelegate代理协...

  • iOS 逆向传值

    代理(delegate)、通知(NSNotification),block等等。 1、委托代理delegate只能...

  • delegate - 代理基础- 02

    delegate-代理基础01 是什么? 协议代理的传值委托方 通过协议里含有参数的方法,将值传递到代理方。 回调...

  • delegate - 代理基础- 01

    是什么? 代理 ? 因种种原因,我需要叫另外一个人来帮我完成某件事情!代理对象? 那个帮忙的人, 就是代理对象代理...

  • iOS开发常见问题集之Delegate

    0 关键词 代理模式、delegate 1 概述 Delegate是Cocoa的精髓之一,Delegate在Coc...

  • Delegate代理

    我理解的代理就是我想做一件事,但是这件事在我的管理范围外,那我就拜托能管理操作这件事的人来做。 比如,自定义一个c...

  • Delegate 代理

    什么是代理? 代理类似于生活中的中介机构,当某人有一个租房买房等需求时,某人找到中介,告诉中介自己的身份和联系方式...

  • 代理 delegate

    代理定义 代理可以声明属性 方法 代理方内 有必须实现的方法 也有选择实现的方法 使用代理时可能出现的问题 通常代...

  • 代理(delegate)

    代理模式是一种消息传递方式,一个完整的代理模式包括:委托对象、代理对象和协议。协议:用来指定代理双方可以做什么,必...

  • UIScrollView

    常见属性: 其他属性: UIScrollView代理(delegate) 当用户开始拖拽,调用delegate的s...

网友评论

      本文标题:delegate - 代理基础- 03

      本文链接:https://www.haomeiwen.com/subject/izajlktx.html