做了一年的iOS,想记录自己对知识点的一点理解。

  第一篇,想记录一下iOS中delegate(委托,也有人称作代理)的理解吧。

delegate就是代理的含义, 一件事情自己不方便做,然后交给其他人去帮助实现, 比如A、B两个类,A的一个对象有一个任务aTask要在B类中实现,任务无法在A类本身中实现,所以要交给B类帮忙,则A和B约定一个协议:

A类:

1   @protocol ADelegate <NSObject>  
2    -(void)aTask;      //协议的一个方法
3 
4   @end
5 
6   //代理属性,同时约定作为代理的对象必须实现ADelegate协议
7 
8   @property (nonatomic,assign) id <ADelegate> aDelegate;  //属性用assign不用retain是为了避免循环引用

B类:

  B类中,B类继承A的代理,表示同意该协议,以后我们就按说好的办事了:

1   //继承A的代理协议

2 @interface

3 @end 

点击,在点击方法onBButtonClicked里触发任务:

1   //按钮点击
 2   -(void)onBButtonClicked{
 3 
 4 
 5       //在B类中,初始化一个A类的对象aObj = [[A alloc] init];
 6       AViewController *aObj = [[AViewController alloc] init];
 7 
 8    //指定A类的代理,这事就交给aObj你去做了。
 9       aObj.aDelegate  = self;
10     
11       //判断_aDelegate实例是否实现了aTask方法
12 
13     //避免未实现aDelegate的类也作为A的监听
14       if([A.aDelegate respondsToSelector:@selector(aTask)]){
15           //_viewDelegate对象调用代理方法触发任务
16           [A.aDelegate aTask];
17         
18           NSLog(@"excute A`s aTask");
19       }
20 
21 
22   }
23 
24 
25   //在代理方法里实现A所交代的任务
26   -(void)aTask{
27 
28    //具体任务内容
29       NSLog(@"aTask is execute.");
30   }

补充: 1.在协议@Protocol里,有些方法不一定都需要实现,可以根据需求添加一些关键字来标记方法的重要性,比如

@required //必须实现的方法
    @optional //可选实现的方法
if
([_delegate respondsToSelector:@selector(sendValue:)]){}
参考链接
http://www.cocoachina.com/ios/20150112/10880.html
 http://www.apkbus.com/forum.php?mod=viewthread&tid=137785