關於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就變色了。以上就是我對代理的一些理解。如果您有更好的意見或建議歡迎留言我們探討。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章