2013-08-11 3 views
0

ARC 환경에서 Box2D를 사용하려고합니다. 다음은 objC 포인터를 __bridge을 사용하여 비 -ObjC 공간에 전달하는 방법입니다. 하지만 sprite var을 할당 취소 할 수 있기 때문에 합법적 인 것으로 보이지 않습니다. 내가 ObjC 공간에 비 ObjC에서 동일한 스프라이트가, 이번에는 __bridge _transfer을 사용하여 해당 전송 방법Box2D 및 ARC에 대한 의문 사항

- (void)addBoxBodyForSprite:(CCSprite *)sprite 
{ 
    b2BodyDef spriteBodyDef; 
    ... 
    spriteBodyDef.userData = (__bridge void*)sprite; 
    b2Body *spriteBody = _world->CreateBody(&spriteBodyDef); 
    ... 
    spriteBody->CreateFixture(&spriteShapeDef); 
} 

이입니다.

-(void)update:(ccTime)dt 
{ 
    ... 
    CCSprite *sprite = (__bridge_transfer CCSprite *)b->GetUserData(); 
    ... 
} 

나는 또한 할당 해제를 사용 DestroyBody(...) 내가 그 몸이 스프라이트보다 더 오래 살 수 있으리라 믿고있어 있기 때문에, 스프라이트 참조 특히 userData을 삭제하지가 들어 몸을, 할당을 취소 할 수 있습니다.

위의 다리를 사용하는 것이 합법적인지 여부는 문제입니다.

답변

0

stuct에 Objective-C 개체를 저장하려면 struct.val = CFBridgingRetain(val)을 사용하십시오. 값에 액세스 할 때 id val = (__bridge id)struct.val을 사용하십시오. 해제하려면 CFRelease(struct.val)을 사용하십시오.