iOS委托的理解
转载: http://www.cnblogs.com/Camier-myNiuer/archive/2013/03/24/Camier.html
今天晚上才终于弄明白了协议,委托。 实际上协议和委托是分不开的。有协议就必须有委托。自己写好了协议(相当于接口),委托谁去实现呢。所以就必须有一个类去实现他。 那么这个类就成为了 委托对象。
话说,我们为什么要弄一个协议出来呢。我说说我的见解吧。 类A自己需要完成一个具体功能,但是这个功能的一些零部件在B类里面,所以A类就写一个协议,里面写上几个方法。然后让B类实现协议,即在@interface XXX <协议名>,然后在B类里面指定这个协议的一个委托对象。即 a(A类的一个对象).delegate = self; self即指的是本类(B)。那么 接下来要做的事情就是,在B类中去实现这个协议里面的几个方法。 现在呢,这个功能已经在B类里面实现好了,那么A类现在就能直接用了。A类具体怎样调用这个协议里面的方法呢? 我们应在A.h里面写一个 该id<协议名>类型的实例 或者 @property(nonatomic,assign) id <协议名>DDD;然后在去调用该协议中的方法。 我在这里插一句话,DDD 实际上指的是 实现该协议的类的对象。如果你听的有点儿糊涂,我给你换一句话,此属性用于指定实现该协议的对象。 需要理解的就是这么一点儿。下面写写协议具体的语法
声明协议:
@protocol 协议名
方法1;
方法2;
......
@end
举个例子:
@end
实现该协议
哪个类实现,就在那个类的@interface 类名 旁边的尖括号里面写上要实现的协议名。即<协议名>。
举个例子:
在该类里面如何指定委托对象呢,把声明协议的那个类,写一个对象。然后“.delegate” ,指定一个委托对象。
举个例子:
指定了委托对象后,在该类里面就要实现该协议里面的方法了。
举个例子:
在该类里面已经实现了功能,那么现在就要回到原来的那个类(即写协议的那个类)里面了,来实现协议方法。
怎样实现呢,前面已经说过了,
首先,需要声明一个id类型的实例变量或者声明一个属性,但是该id类型的变量声明有些特殊,因为需要在id之后加上用尖括号括起来的该协议名,这个我们大家应该能想通。
举个例子:
声明一个实例变量:
声明一个属性:
需要在.m里面
其次,再调用该方法。
举个例子:
或者
最终,就大功告成了。相信大家看完之后有些累了,建议再重新看一遍。就会理解协议与委托。
本人学术浅薄,若有错误,请不惜赐教。