2012-02-23 4 views
0

현재 장면을 새로 고치려고하는데 init이 발생하면 dealloc이 발생합니다.현재 장면이 NULL을 반환합니까?

현재 장면에서 호출 된 경우 돌아올 dealloc에 ​​대한 조건을 갖고 싶습니다.

if ([[[CCDirector sharedDirector] runningScene] getChildByTag:16]) 
return; 

[[[CCDirector sharedDirector] runningScene] isKindOfClass:[HelloWorldLayer class]] 

모두가 나를 NULL 제공하고, 조건은 사실이 아니다 :

내가이 시도되었다.

왜 그런가요?

+(CCScene *) scene 
{ 
    // 'scene' is an autorelease object. 
    CCScene *gameScene = [CCScene node]; 

    // 'layer' is an autorelease object. 
    HelloWorldLayer *layer = [HelloWorldLayer node]; 

    layer.tag=16; 
    // add layer as a child to scene 
    [gameScene addChild: layer]; 

    // return the scene 
    return gameScene; 
} 

어떻게 내가는 장면을 새로 고치의 dealloc을 제거 할 수 ?? :

내 장면처럼 보인다

+4

가 확실하지 내가 완전히 질문을 이해하지만하십시오 할당 해제를 중단 할 수있는 방법이 없다 - 당신의 객체가 해제 된 후 발생하는 편도입니다. 첫 번째 장소에서 물건이 나오지 않도록해야합니다. – nielsbot

+0

나는 그게 사실이라고 생각하지 않는다. dealloc에서 반환하면 해당 함수가 종료됩니다. – Curnelious

+1

아니요, 개체의 할당이 해제됩니다. 사실, dealloc이 호출 될 때 런타임은 단지 당신에게 당신이 보유하고있는 객체를 해제 할 기회를 주지만, dealloc이 끝나면 객체의 할당을 해제 할 것입니다. 따라서 리턴을 호출하면 기본적으로 그에게 알립니다. 이제는이 오브젝트를 할당 취소 할 수 있습니다. – sch

답변

1

이 작업을 수행하지 마십시오 :

[[CCDirector sharedDirector] replaceScene:self] 

나이 :

CCDirector* director = [CCDirector sharedDirector]; 
[director replaceScene:director.runningScene]; 

당신은 단순히 replaceScene 방법으로 자신이나 현재 실행중인 장면을 전달하여 현재 장면을 대체 할 수 없습니다.

[[CCDirector sharedDirector] replaceScene:[MyScene scene]] 

runningScene에주의하십시오. runWithScene 메시지를 처음으로 디렉터에게 보내면 runningScene은 항상 nil이됩니다. 당신은 onEnter 방법에 약간의 초기화를 지연시킬 수 있습니다 :

-(void) onEnter 
{ 
    // runningscene is valid in onEnter 
    [[CCDirector sharedDirector] runningScene]; 
    [super onEnter]; 
} 
관련 문제