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