0

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

問題は、上記のブリッジの使用が合法かどうかです。

4

1 に答える 1