【发布时间】:2013-08-12 20:46:24
【问题描述】:
我正在尝试在 ARC 环境中使用 Box2D。下面是我如何使用__bridge 将 ObjC 指针传递给非 ObjC 空间。但在我看来这并不合法,因为 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(...) 解除分配body,其中包含精灵引用而不是专门删除userData,因为我假设body 比精灵寿命更长。
问题是使用上述桥梁是否合法。
【问题讨论】:
标签: c++ objective-c automatic-ref-counting box2d