我正在使用 Chipmunk 物理引擎编写游戏,我想在每个身体的userData
字段中存储一个指向 Objective-C 对象的指针。我知道我需要使用桥接演员表在id
and之间转换void *
,但我不确定我这样做的方式是否安全:
// When body is created
cpBody *body = cpBodyNew(...);
UserData *userData = [[UserData alloc] init];
cpBodySetUserData(body, CFBridgingRetain(body));
...
// When body is destroyed
UserData *userData = cpBodyGetUserData(body);
CFBridgingRelease(userData);
cpBodyFree(body);
这段代码似乎有效,但我也读到你只应该CFBridging*()
在可以免费桥接到核心基础类型的对象上使用。由于UserData
派生自NSObject
并且NSObject
不在免费桥接类型列表中,因此我似乎违反了该规则。
我的代码是否可以,因为我最终调用CFBridgingRelease
并且不尝试将对象传递给任何其他核心基础函数,或者我应该以另一种方式将 Objective-C 对象传入和传出 C?