从c函数访问实例变量和方法

时间:2010-10-13 15:24:23

标签: objective-c chipmunk

在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的范围。到目前为止,我没有运气。

2 个答案:

答案 0 :(得分:2)

当你调用那个C函数时,你需要传递self。 C函数没有self_cmd,因为它们不在对象内部(无论您将它们放在代码中的哪个位置)。

答案 1 :(得分: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);
}