Box2D を ARC 環境で使用しようとしています。以下は、を使用して ObjC ポインタを非 ObjC 空間に渡す方法__bridge
です。sprite
しかし、 var の割り当てを解除できるため、私には合法ではないようです。
- (void)addBoxBodyForSprite:(CCSprite *)sprite
{
b2BodyDef spriteBodyDef;
...
spriteBodyDef.userData = (__bridge void*)sprite;
b2Body *spriteBody = _world->CreateBody(&spriteBodyDef);
...
spriteBody->CreateFixture(&spriteShapeDef);
}
これは、同じスプライトを非 ObjC から ObjC 空間に転送する方法です。今回は__bridge _transfer
.
-(void)update:(ccTime)dt
{
...
CCSprite *sprite = (__bridge_transfer CCSprite *)b->GetUserData();
...
}
また、ボディはスプライトよりも長く生きていると想定しているため、DestroyBody(...)
スプライト参照を含み、具体的には削除しないボディの割り当てを解除するために useを解放します。userData
問題は、上記のブリッジの使用が合法かどうかです。