Objective-C:初始化代理的位置

Objective-C:初始化代理的位置

问题描述:

我不完全理解如何在obj-C中使用委托模式。基本上我有一个类:DigGameControlLayer.h,在它的标题中,我定义了一个,这个类需要所有用户都需要实现的方法。然后,我创建了delegate属性,我在代码中使用该属性,就像任何其他属性一样,委托moveObjectToPosition:方法应该执行的操作。到目前为止,我希望这么好。Objective-C:初始化代理的位置

//DigGameControlLayer.h 
@protocol DigGameControlLayerDelegate <NSObject> 
-(void) moveObjectToNewPosition: (CCSprite *)object atSpeed:(float)moveSpeed; 
@end 

@property (assign) id <DigGameControlLayerDelegate> delegate; 

然后就是使用类(在这种情况下DigCharacter)类的说,它附着在DigGameControlDelegate协议

@interface DigGoblinPlayer : DigCharacter <DigGameControlLayerDelegate> 

但是我不明白的是我在哪里可以初始化和设置delegate属性声明?原因目前它什么也不做,当我使用它在DigGameControlLayer因为it's空

[self.delegate moveObjectToNewPosition:object atSpeed:moveSpeed]; 

您可以通过delega TE在init方法,像这样:

DigGoblinPlayer* player; 
player = [[DigGoblinPlayer alloc] initWithName:(NSString*)name delegate:self]; 

或单独设置:

DigGoblinPlayer* player; 
player = [[DigGoblinPlayer alloc] initWithName:(NSString*)name]; 
player.delegate = self; 

你选择哪种样式取决于如果你总是希望/需要一个委托,或者如果你希望能够稍后更改/重置。

在某些情况下,您不希望委托人成为公共财产;那么你会使用第一种风格。

你在iOS SDK中看到很多这样的例子,如here

请注意,self - 这只是一个例子,当然还有其他的对象 - 需要实现这个委托。而name是我编造的东西。

+0

现在就工作,谢谢!最后,我了解了代表团模式 - 我不知道为什么它很难理解。 – 2013-05-06 06:13:20

在DigGoblinPlayer

实现方法

-(void) moveObjectToNewPosition: (CCSprite *)object atSpeed:(float)moveSpeed 
{ 
} 

当方法DigGameControlLayer调用此方法将被调用

[self.delegate moveObjectToNewPosition:object atSpeed:moveSpeed];