Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标C:在何处初始化委托_Objective C_Delegates_Protocols - Fatal编程技术网

Objective c 目标C:在何处初始化委托

Objective c 目标C:在何处初始化委托,objective-c,delegates,protocols,Objective C,Delegates,Protocols,我不完全理解如何在obj-C中使用委托模式。基本上我有一个类:DigGameControlLayer.h,在它的标题中,我定义了一个协议,该类的所有用户都需要实现一个所需的方法。然后,我创建了delegate属性,我在代码中使用该属性与任何其他属性一样,来委托moveObjectToPosition:方法应该做的事情。我希望到目前为止一切顺利 //DigGameControlLayer.h @protocol DigGameControlLayerDelegate <NSObject>

我不完全理解如何在obj-C中使用委托模式。基本上我有一个类:
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;