Objective c 目标C:在何处初始化委托
我不完全理解如何在obj-C中使用委托模式。基本上我有一个类:Objective c 目标C:在何处初始化委托,objective-c,delegates,protocols,Objective C,Delegates,Protocols,我不完全理解如何在obj-C中使用委托模式。基本上我有一个类:DigGameControlLayer.h,在它的标题中,我定义了一个协议,该类的所有用户都需要实现一个所需的方法。然后,我创建了delegate属性,我在代码中使用该属性与任何其他属性一样,来委托moveObjectToPosition:方法应该做的事情。我希望到目前为止一切顺利 //DigGameControlLayer.h @protocol DigGameControlLayerDelegate <NSObject>
DigGameControlLayer.h
,在它的标题中,我定义了一个协议
,该类的所有用户都需要实现一个所需的方法。然后,我创建了delegate
属性,我在代码中使用该属性与任何其他属性一样,来委托moveObjectToPosition:
方法应该做的事情。我希望到目前为止一切顺利
//DigGameControlLayer.h
@protocol DigGameControlLayerDelegate <NSObject>
-(void) moveObjectToNewPosition: (CCSprite *)object atSpeed:(float)moveSpeed;
@end
@property (assign) id <DigGameControlLayerDelegate> delegate;
但我不明白的是,我应该在哪里初始化和设置声明的委托
属性?因为目前我在DigGameControlLayer
中使用它时,它什么都不做,因为它是空的
[self.delegate moveObjectToNewPosition:object atSpeed:moveSpeed];
在DigGoblinPlayer中
实施该方法
-(void) moveObjectToNewPosition: (CCSprite *)object atSpeed:(float)moveSpeed
{
}
当该方法在DigGameControlLayer中调用时,将调用该方法
[self.delegate moveObjectToNewPosition:object atSpeed:moveSpeed];
可以在init方法中传递委托,如下所示:
DigGoblinPlayer* player;
player = [[DigGoblinPlayer alloc] initWithName:(NSString*)name delegate:self];
或者单独设置:
DigGoblinPlayer* player;
player = [[DigGoblinPlayer alloc] initWithName:(NSString*)name];
player.delegate = self;
选择哪种样式取决于您是否始终希望/需要委派,或者您是否希望以后能够更改/重置委派
在某些情况下,您不希望委托成为公共财产;然后你会使用第一种风格
在iOS SDK中可以看到很多类似的例子
请注意,
self
——这只是一个示例,当然可能是另一个对象——需要实现此委托。name
是我编出来的。现在可以用了,谢谢!最后,我理解了委托模式——我不知道为什么这么难理解。
DigGoblinPlayer* player;
player = [[DigGoblinPlayer alloc] initWithName:(NSString*)name];
player.delegate = self;