0

在 Objective-C 中,是否可以从静态 c 函数的范围内访问实例变量和方法?我觉得我可能忽略了一个简单的答案,但我对这门语言还是很陌生。

考虑以下精简代码:

@implementation MyObject

static int ammoHitSensor(cpArbiter *arb, cpSpace *space, void *unused)
{
    // Call an instance method - doesn't work, self is undefined!
    [self doSomethingElse];
}

-(id)init
{
    // Code to create graphics, etc, hidden for clarity 
    // Adding a collision handler in the Chipmunk physics library
    cpSpaceAddCollisionHandler(space, COL_TYPE_AMMO, COL_TYPE_SENSOR, ammoHitSensor, NULL, NULL, NULL, NULL);
}

-(void)doSomethingElse
{
    // Stuff happens
}

@end

所以我想一旦我进入 的范围ammoHitSensor,我希望有一些方法可以回到MyObject. 到目前为止,我还没有运气。

4

2 回答 2

2

self当您调用该 C 函数时,您需要传递。C 函数没有self或者_cmd因为它们不存在于对象内部(无论您将它们放在代码中的什么位置)。

于 2010-10-13T15:25:49.963 回答
1

试试这个:

static int ammoHitSensor(cpArbiter *arb, cpSpace *space, void *obj)
{
    [(MyObject*)obj doSomethingElse];
}

-(id)init
{
    cpSpaceAddCollisionHandler(space, COL_TYPE_AMMO, COL_TYPE_SENSOR, ammoHitSensor, NULL, NULL, NULL, self);
}
于 2010-10-13T15:52:35.290 回答