zoukankan      html  css  js  c++  java
  • oc学习之路----代理模式

    今天刚学完oc的代理模式,觉得有点新奇,第一次接触,原理 

    A完成一件事,但是自己不能完成,于是他找个代理人B 替他完成这个事情,他们之间便有个协议 (protocol),B继承该协议来完成A代理给他的事情

    步骤,先在类A中写一个协议,在协议中声明一些方法,并且在属性中声明一个代理属性,这个属性id<协议>让我想起jquery,我觉得像是过滤掉一些类,也就是说不是任何一个类都可以作为A类的代理,必须实现协议,并继承(不知道用词恰当不恰当),协议的一些方法,至于为什么,我是这样理解的,由于类A中的其他普通方法,会用到协议里面的方法,如果没有实现这样方法(@option方法除外),就不能调用类A的方法了,至于怎么触发,肯定是用动作监听实现的,无论是scrollView还是自己写的,切入点还是点击或滑动等一些事件,至于一些option事件,在触发事件里面肯定有判断调用,后面可以选择重写,而至于B类想成为A类的代理,只是自己赋值给A类中已经声明好得属性,当然,该属性有过滤,也就是实现了某个协议。大概这样吧:

      最后附上代码:

     1 A类
     2 #import <UIKit/UIKit.h>
     3 @class EtundApp;
     4 @class EtundAppView;
     5 
     6 //声明协议
     7 @protocol EtundAppViewDelegate <NSObject>
     8 @optional
     9 -(void)appViewClickedDownloadButton:(EtundAppView *)appView;
    10 @end
    11 
    12 @interface EtundAppView : UIView
    13 /**
    14 * 代理
    15 */
    16 @property (nonatomic, strong) id<EtundAppViewDelegate> delegate;
    17 @property (nonatomic, strong) EtundApp *app;
    18 +(instancetype)appView;
    A类实现,触发事件类

    - (IBAction)download:(UIButton *)sender {

    
    

    //    改变状态

    
    

        sender.enabled = NO;

    
    

    //    通知代理

    
    

        if ([self.delegate respondsToSelector:@selector(appViewClickedDownloadButton:)]){

    
    

            [self.delegate appViewClickedDownloadButton:self];

    
    

        }

    
    

    }

    19 @end
    20 B类
    21 //声明代理
    22 appView.delegate = self;
    23 重写协议的方法
    24 - (void)appViewClickedDownloadButton:(EtundAppView *)appView{}

                                

      

  • 相关阅读:
    预备作业02-162315马军
    预备作业01-162315马军
    # 2017-2018-1 20155224 《信息安全系统设计基础》第四周学习总结
    # 2017-2018-1 20155224 《信息安全系统设计基础》第3周学习总结
    # 第二周课堂实践以及MyOD
    # 2017-2018-1 20155224 《信息安全系统设计基础》第1周学习总结
    # 20155224 2016-2017-2《Java程序设计》课程总结
    # 20155224 实验五 Java网络编程及安全
    # 20155224 课堂实践 MyOD
    # 20155224 实验四 Android程序设计
  • 原文地址:https://www.cnblogs.com/superYou/p/4217610.html
Copyright © 2011-2022 走看看