Box2D и ARC сомневаются

Я пытаюсь использовать 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(...) освободить тело, которое содержит ссылку на спрайт, а не специально удаляет userDataпотому что я предполагаю, что тело живет дольше, чем спрайт.

Вопрос в том, законно ли использование вышеуказанных мостов или нет.

0

Решение

Чтобы сохранить объект Objective C в структуре, используйте struct.val = CFBridgingRetain(val), при доступе к значению используйте id val = (__bridge id)struct.val, Для его выпуска используйте CFRelease(struct.val),

0

Другие решения

Других решений пока нет …