OC 委托模式

委托模式是我们经常用到的设计模式,首先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);

}

```

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容