美文网首页iOS
OC 委托模式

OC 委托模式

作者: subject_2619 | 来源:发表于2017-03-28 17:17 被阅读38次

    委托模式是我们经常用到的设计模式,首先OC里面不支持多继承,那么我们想实现类似多继承的功能的时候,我们可能会想到委托模式。顾名思义,代理模式我们可以简单的认为:A类里面触发了某一事件,需要告诉B类,B类要进行相应的操作。

    实现代理的步骤:

    1.首先要实现代理的定义,用关键字@protocol,名称一般是”类名+Delegate“,用@optional

    表示可以实现也可以不实现的方法,@required是必须实现的方法,像tableView里面  返回行数与行里面内容。

    2.在数据来源的类中,定义属性,一般情况下,我们用weak修饰,防止循环引用,引起内存泄漏等问题。@property(nonatomic,weak)id delegte;

    3.判断代理方是不是实现了代理的方法

    ```

    if([self.delegterespondsToSelector:@selector(test:)]) {

    [self.delegtetest:@"代理成功了!"];

    }

    ```

    下面Demo如下,ViewController页面中点击按钮,转入TestDemo类中,点击TestDemo中的按钮,能够让ViewController页面打印输出“代理成功了!”。

    ```

    #import

    //定义委托

    @protocolTestDemoDelegate

    //可以实现的方法

    @optional

    -(void)test:(NSString*)cont;

    @end

    @interfaceTestDemo :UIViewController

    //定义delegate

    @property(nonatomic,weak)id delegte;

    @property(nonatomic,strong)UIButton*but;

    @end

    #import"TestDemo.h"

    @implementationTestDemo

    @synthesizebut;

    - (void)viewDidLoad {

    self.but=[[UIButtonalloc]initWithFrame:CGRectMake(50,80,60,60)];

    but.backgroundColor=[UIColorredColor];

    [self.butaddTarget:selfaction:@selector(clickEvent)forControlEvents:UIControlEventTouchDown];

    [self.viewaddSubview:but];

    }

    -(void) clickEvent{

    //判断代理方实现该方法

    if([self.delegterespondsToSelector:@selector(test:)]) {

    [self.delegtetest:@"代理成功了!"];

    }

    }

    @end

    - (void)viewDidLoad {

    self.but=[[UIButtonalloc]initWithFrame:CGRectMake(50,80,60,60)];

    but.backgroundColor=[UIColorredColor];

    [self.butaddTarget:selfaction:@selector(clickEvent)forControlEvents:UIControlEventTouchDown];

    [self.viewaddSubview:but];

    }

    -(void) clickEvent{

    TestDemo*testDemo=[[TestDemoalloc]init];

    testDemo.delegte=self;

    [selfpresentViewController:testDemoanimated:truecompletion:nil];

    }

    //代理Test函数

    -(void)test:(NSString*)cont{

    NSLog(@"cont=%@",cont);

    }

    ```

    相关文章

      网友评论

        本文标题:OC 委托模式

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