天天看点

objective-c - delegate

代理(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对象的代理:

[delegate setLabelColor];
           

继续阅读