3

我正在使用 Chipmunk 物理引擎编写游戏,我想在每个身体的userData字段中存储一个指向 Objective-C 对象的指针。我知道我需要使用桥接演员表在idand之间转换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?

4

1 回答 1

5

它是安全的。 NSObject是免费桥接到通用的CFTypeRef. 另外,我假设您没有在 上调用任何其他 Core Foundation 函数void*,所以这无关紧要。

于 2013-11-02T02:49:35.230 回答