码迷,mamicode.com
首页 > 移动开发 > 详细

ios中的代理与协议(delegate)

时间:2015-08-17 23:51:47      阅读:528      评论:0      收藏:0      [点我收藏+]

标签:

源码地址 :http://download.csdn.net/download/swanzhu/9016861


一、理解协议与代理


协议

协议的格式:@protocol关键字:协议的声明


例如

@protocol CustomAlertViewDelegate <NSObject>

<methods>协议的方法


@optional

//此关键字下声明的方法,是可选实现的方法。


@required

//此关键字声明的方法为,必须实现的方法,如果不实现,编译会报警告,程序运行崩溃。


//如果没有规定方法属于可选还是必须实现的,默认为@required


@end

二  代理


代理是一个抽象的概念,我如果想做一件事情,而我自己并不想做,可以让别人帮我来做,那么别人就是我的代理.


例如,我想租个房子,我自己比较懒,于是我想到中介加50块钱的手续费就可以帮我找到房子,我于是给中介打电话,委托中介给我找个房子,此时中介就是我的代理,我委托他帮我找房.

这个例子中,中介就是代理,50块钱的手续费就是协议.



 

      1.先声明好协议:创建协议文件

//协议声明

       @protocol ChangeColorDelegate <NSObject>


     //方法

     -(void)changeColor;




2)那么A)就需要指定让谁(委托人)去执行协议。

A.h中声明一个属性 B*delegate;代表委托人(代理)是谁(B类的对象)

id<协议> delegate;委托人可以是任何实现协议类的对象

//声明

    

@protocol ChangeColorDelegate;


   //指定代理对象,,

   

 @property(nonatomic,assign)id<ChangeColorDelegate>delegate;

3)委托人B(代理)就需要遵守协议,并按照协议完成规定的内容。

1.B首先要实现协议 :B.h中通过<协议名>实现协议。

//实现协议,此时别忘了导入头文件

        

@interface ZYFirstViewController : UIViewController<ChangeColorDelegate>

2.需要在B.m中设置代理: a.delegate = self. selfB类的对象)

//    指定代理

    

second.delegate=self;

3.实现协议方法。

//实现协议方法

-(void)changeColor
{

    self.view.backgroundColor=[UIColor colorWithRed:arc4random()%256/255.0 green:arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1.0];
    
    [self.navigationController popViewControllerAnimated:YES];

}



4.指定代理在什么情况下执行协议方法。



//    指定在什么条件下执行


    [_delegate changeColor];


   







    代理设计模式的基本思想:两个对象协同解决问题,通过代理实现对象与对象之间的通信。

实质:通过传递对象,调用方法。



注意:协议本身不是类,没有父类并且不能定义实例变量,只是对方法的声明,不进行方法的实现;

协议用于专门声明被别的类实现的方法,方法功能更灵活。



版权声明:本文为博主原创文章,未经博主允许不得转载。

ios中的代理与协议(delegate)

标签:

原文地址:http://blog.csdn.net/swanzhu/article/details/47732559

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!