【问题标题】:Box2D and ARC doubtsBox2D和ARC的疑惑
【发布时间】: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


    【解决方案1】:

    要将 Objective-C 对象存储在 stuct 中,请使用 struct.val = CFBridgingRetain(val)。访问值时,使用id val = (__bridge id)struct.val。要发布它,请使用CFRelease(struct.val)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-02
      • 1970-01-01
      • 2017-02-16
      • 2013-09-06
      • 1970-01-01
      • 2022-01-05
      • 2018-11-30
      • 2016-05-30
      相关资源
      最近更新 更多