代理介绍

  • id类型的成员属性->协议->告诉对应对象应该实现哪些方法
    自己调用方法,然后由代理对象实现-> respondsToSelector:@selector( )
    如果方法可选实现,就加一个判断

  • 声明一个代理分为三步:
    ①.声明协议->告诉对应的对象,该实现哪些方法
    ②.声明一个id类型的成员属性(weak修饰) ->不限制调用方法的对象类型(任意对象都可以实现对应的方法)
    id<协议名> -> 仅仅是为了告诉别人对应的协议是哪一个
    ③.自己调用自己协议的方法
    关键: respondsToSelector:@selector( ) 判断代理对象能否响应代理中的方法
    是否添加判断的依据是根据协议中方法的标识 :
    @optional -->要加
    @required -->不要加(如果方法前不加关键字修饰,默认必须实现)
    如果对应对象没有实现就会报错

  • 使用代理:
    ①.设置代理对象 ⬇️
    ②.遵循协议 ⬆️ 不遵循协议同样可以实现代理方法,只是在实现方法书写时,不会智能提示出方法,需要手写
    本质( 写协议 ->告诉对应对象应该实现哪些方法)
    协议命名通常有一个特点: 类名 + 代理的名字(成员属性的名字)
    ③.实现方法

需要注意的是:

  • 在OC中遵循协议时可以写基协议甚至不遵循协议都是没有问题的,只是不遵循协议在实现代理方法时没有智能提醒,只能靠手敲
  • 而Swift更为严谨,如果不遵循协议或者写成基协议都是不允许的,直接会报错
    比如使用UICollectionView时,为了监听滚动,设置代理后,遵循了UIScrollViewDelegate协议,就会报错
    必须要写成:
    extension JSEmoticonKeyBoardView: UICollectionViewDelegate

你可能感兴趣的:(代理介绍)