3

userDataChipmunk 物理エンジンを使用してゲームを作成しています。Objective-C オブジェクトへのポインターをすべてのボディフィールドに格納したいと考えています。idと の間でキャストするにはブリッジング キャストを使用する必要があることはわかっていますが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*()このコードは機能しているように見えますが、Core Foundation 型に無料でブリッジできるオブジェクトでのみ使用することになっていることも読みました。はからUserData派生したものNSObjectであり、無料のブリッジ タイプNSObjectのリストに含まれていないため、そのルールを破っているようです。

最終的に呼び出しCFBridgingReleaseてオブジェクトを他の Core Foundation 関数に渡そうとしないため、コードは問題ありませんか、または C 内外で Objective-C オブジェクトを転送する別の方法がありますか?

4

1 に答える 1

5

安全です。 NSObjectは、一般的な にブリッジされたフリーダイヤルCFTypeRefです。また、 で他の Core Foundation 関数を呼び出していないと仮定しているvoid*ので、ほとんど問題にはなりません。

于 2013-11-02T02:49:35.230 に答える