我正在尝试在 ARC 环境中使用 Box2D。下面是我如何使用__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();
...
}
我还 deallocate useDestroyBody(...)
来释放 body,其中包含 sprite 引用而不是专门删除userData
,因为我假设 body 比 sprite 寿命更长。
问题是使用上面的桥梁是否合法。