代理(delegate)是一种设计模式,objective-c通过对象引用实现代理。
比如,我们让A对象去完成一项工作,不过A对象自己不完成这项工作,它有一个代理,也就是B对象,B对象会完成这项工作。
其实就是通过“对象引用”来实现这个机制的:
- - (void)work{
- //delegateObj就是B对象
- [delegateObj work];
- }
好了,下面看看如何实现代理机制:
- @interface A : CCLayer
- {
- CCLabelTTF *label;
- id delegate;//代理指针,稍微会对它赋值。
- }
- @property(retain) id delegate;//必须是一个属性,因为要在外部给它赋值。
- - (id)initA;
- @end
然后 创建A对象:
- A *a = [[A alloc] initA];
接着给A对象指定一个代理对象:
- B *b = [[B alloc] initB];
- a.delegate = b;
B类是这样定义的:
- @implementation B
- - (id)initB{
- if ((self = [super init])) {
- label = [CCLabelTTF labelWithString:@"layer 2" fontName:@"Arial" fontSize:12];
- label.position = ccp(50,50);
- [self addChild:label];
- }
- return self;
- }
- //该方法就是A对象要调用的方法
- - (void)setLabelColor{
- [label setColor:ccc3(100,200,100)];
- }
- @end
然后 你就可以这样使用A对象的代理: