iOS 委托代理(delegate)入门

来源:互联网 发布:php yii 编辑:程序博客网 时间:2024/04/19 13:02
             **************************************************************

                                                                              atany原创,转载请注明博主与博文链接,3Q吐舌头

                                                                  http://blog.csdn.net/yang8456211/article/details/11542455

                                                                                                                                —— by atany

                                                                        **************************************************************

一、什么是委托

       刚接触iOS开发的朋友肯定对委托这个东西感觉到陌生和迷惑,特别是Java转过来的(博主中枪),那么今天我们就简单的谈谈委托这个东西,atany会尽量做到说的浅显易懂的大笑~

       首先让我们来看看委托的定义:委托delegate),就是某个对象指定另一个对象处理某些特定任务的设计模式。通俗来说,就是“某个对象”把要做的事情委托给“另一个对象”去做,简单吧。

       其中“某个对象”被称作委托者,“另一个对象”被称作是被委托者。

       【注】:委托者与被委托者的叫法很多,例如(普通对象与委托对象,委托与代理等等)为了方便大家理解,下文统一使用“委托与代理”的叫法。

       在委托与代理之间还有一个重要的概念——协议,协议是委托与代理之间的桥梁,把两者紧密联系在一起(关于协议的具体内容,本节不详细深入)。


二、委托与代理

如下图,委托方通过某种方式把任务分派出去给代理方处理,而两者之间的联系便是协议。



在程序中:一般情况下

1.委托需要做的工作有:

     1.1定义协议与方法

     1.2声明委托变量

     1.3设置代理

     1.4通过委托变量调用委托方法

 

2.代理需要做的工作有:

     2.1遵循协议

     2.2实现委托方法

可能现在大家还不明白,我们设置如下场景,把每个工作都带入代码就清楚了

场景:Boss准备举行一场party,准备邀请Atany来参加party,但是Boss没空写email给Atany,于是他委托Henry与Mary来做这件事情。

1)   先看YGViewController.h(根控制器,程序第一个界面,类似于Boss)

[cpp] view plaincopy
  1. #import <UIKit/UIKit.h>  
  2. @protocol InviteDelegate  
  3. -(void)inviteToMyParty:(NSString *)personName;//1.1定义协议与方法  
  4. @end  
  5.   
  6. @interface YGViewController : UIViewController  
  7. @property (assign,nonatomic) id<InviteDelegate> delegate;//1.2声明委托变量  
  8. - (IBAction)ClickByMary:(id)sender;//委托给Mary  
  9. - (IBAction)ClickByHenry:(id)sender;//委托给Henry  
  10. @end  

在YGViewController.h中,委托执行了两件事情,分别是定义协议与声明委托。Boss并没有实现inviteToMyParty这个方法,他没有自己去邀请。


2)   再看YGViewController.m中ClickByMary与ClickByHenry点击事件

[cpp] view plaincopy
  1. - (IBAction)ClickByMary:(id)sender {  
  2.     Mary *mary = [[Mary alloc]init];  
  3.     self.delegate = mary;//1.3设置代理  
  4.     [self.delegate inviteToMyParty:@"atany"];//1.4通过委托变量调用委托方法  
  5. }  
  6. - (IBAction)ClickByHenry:(id)sender {  
  7.     Henry *henry = [[Henry alloc]init];  
  8.     self.delegate = henry;//1.3设置代理  
  9.     [self.delegate inviteToMyParty:@"atany"];//1.4通过委托变量调用委托方法  
  10. }  

两者大同小异,都是实例化对象,然后设置代理,最后调用方法。

BOSS可以选择不同的代理(Henry与Mary)来做这件事情(inviteToMyParty),而自己却不用做。

 

3)   以Henry为例子,我们看看Henry.h

[cpp] view plaincopy
  1. #import <UIKit/UIKit.h>  
  2. #import "YGViewController.h"  
  3.   
  4. @interface Henry : UIViewController <InviteDelegate>//2.1遵循协议  
  5. @end  

Henry遵循协议,随时准备好接收Boss的召唤。

4)   Henry.m中我们实现了inviteToMyParty的具体方法,我们弹出一个对话框来显示邀请内容。

[cpp] view plaincopy
  1. -(void)inviteToMyParty:(NSString *)personName{  
  2.     NSString *hello = [NSString stringWithFormat:@"Hello,%@",personName];  
  3.     NSString *str = [NSString stringWithFormat:@"Hey Boy,this is Henry,Come to our party Please!!"];  
  4.     UIAlertView *alert = [[UIAlertView alloc]initWithTitle:hello message:str delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];  
  5.     [alert show];  
  6. }  

按照上面步骤便完成一个简单的协议+委托的程序。

效果图:

             

             

            

           Over:有不懂或者错误的地方,欢迎指正。


0 0
原创粉丝点击