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
是我编造的东西。
答
在DigGoblinPlayer
实现方法
-(void) moveObjectToNewPosition: (CCSprite *)object atSpeed:(float)moveSpeed
{
}
当方法DigGameControlLayer调用此方法将被调用
[self.delegate moveObjectToNewPosition:object atSpeed:moveSpeed];
现在就工作,谢谢!最后,我了解了代表团模式 - 我不知道为什么它很难理解。 – 2013-05-06 06:13:20