关于iOS开发代理的理解

题记: 做ios好几年了,刚毕业出来的时候,对于ios的代理方法怎么都理解不了。但是也会去用。只是不理解,工作了几年之后,再回头去看当前所难以理解的事情也已经不是多么的难以理解了。因此接下吧把自己对于代理的一些理解写出来分享一下。

当对象A想做某件事时,他无能为力去做。或者说他不想去做。那么他就需要寻找一个代理去帮他做。很显然。代理的作用就是代替A去做某件事。代理跟我们日常生活中的代理意思是一样的。例如小明想去打官司。但是他不懂法律,并且自己口才不好。所以他只能请一个代理律师去。这个代理律师的作用就是代替自己去打官司。在举个例子。小强现在在玩游戏。玩的很聚精会神,但是他现在饿了。又不想去食堂吃饭。那么他又一个办法,就是叫外卖。那么现在这个送外卖的就是小强的代理。他帮助小强做了他想做却不能做,或懒的做的事情。

 理解的上述概念就好办了。接下来我们把我们日常生活中的经验应用到我们的代码中去。

1、现在我自定义一个view对象。对象名叫myView的家伙。间称A。并且在A中创建一个按钮。实现该按钮的点击方法。

实现代码如下:

#import "myView.h"

@interface myView()

@property(nonatomic,strong)UIButton *button;

@end

@implementation myView

-(instancetype)initWithFrame:(CGRect)frame{

    

    if (self=[super initWithFrame:frame]) {

        [self initView];

    }

    return self;

}

-(void)initView{

    _button =[UIButton buttonWithType:UIButtonTypeCustom];

    [_button setTitle:@"变色" forState:UIControlStateNormal];

    [_button setBackgroundColor:[UIColor blackColor]];

    [_button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

    [_button addTarget:self action:@selector(changeBackgroundColor) forControlEvents:UIControlEventTouchUpInside];

    [self addSubview:_button];

    

}

-(void)changeBackgroundColor{

   

}

2、把这个对象A放到一个控制器UIViewController上面展示出来。我们简称这个控制器为对象B

  myView *view=[[myView alloc]initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width/2-50, 200, 100, 50)];

    [self.view addSubview:view];

3、现在我想做一件事情。就是用对象A去控制对象B的背景颜色。怎么去做呢。显然A是一个对象、B另外一个对象。A对象myView。B对象是控制器。A现在想做一件事情就是想控制B的颜色。这件事显然A做不到。因为控制B的颜色只有他自己才能办到。那么A想做这件事怎么办呢。他就需要跟B先达成一个协议。这个协议的目的就是让B同意并认同A的做法。A如何与B达成协议呢,第一步自己先制定一个协议。制定协议的方法如下。

#import <UIKit/UIKit.h>

@protocol buttonClickDelegate<NSObject>

-(void)buttonClick;

@end

@interface myView : UIView

@property(nonatomic,weak) id <buttonClickDelegate> delegate;

@end

A想控制B,想让B帮他做控制自己颜色变化这件事。B必须同意A的协议。

@interface ViewController ()<buttonClickDelegate>

     view.delegate=self;

此时A的协议已经写好。B也认同的A的协议。那么A与B之间就达成了一种委托人与代理人的关系。委托人是A。因为A想让B帮他办事,委托人当然是A。代理人是B。此时B就是A的代理了。也就是UIViewController已经是myView这个对象的代理的。

4、开始做A想做的事情。A想做一件事情肯定要有一个触发操作。A什么时候让B变色。我们现在把点击按钮作为触发操作。当A点击自己的按钮时候开始让B为自己做事情(变色)。这时候就该在点击按钮的方法中实现。先判断代理是否能响应协议中的方法。如果能响应。就让代理去执行协议方法。测试的代理人是B。所self.delegate就是B对象

-(void)changeBackgroundColor{

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

        [self.delegate buttonClick];

    }

}

5、在对象B中实现操作控制的方法

-(void)buttonClick{

    self.view.backgroundColor=[self randomColor];

}

这样A就完全实现了,控制B的方法了。也就是A完全雇佣了B去为自己做事情。B完全成为了A的代理了。A就可以做自己想做的事了。

点击变色B就变色了。以上就是我对代理的一些理解。如果您有更好的意见或建议欢迎留言我们探讨。

猜你喜欢

转载自blog.csdn.net/wangjie33589/article/details/80857762