Box2D和ARC怀疑

时间:2013-08-11 12:10:41

标签: c++ objective-c automatic-ref-counting box2d

我正在尝试在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(...)取消分配正文,其中包含精灵参考,而不是专门删除userData,因为我假设正文比精灵长寿。

问题是使用上述桥梁是否合法。

1 个答案:

答案 0 :(得分:0)

要在结构中存储Objective-C对象,请使用struct.val = CFBridgingRetain(val)。访问该值时,请使用id val = (__bridge id)struct.val。要释放它,请使用CFRelease(struct.val)