userData
Chipmunk 物理エンジンを使用してゲームを作成しています。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 オブジェクトを転送する別の方法がありますか?