를이 내 '틱'함수 객체 :할당 해제있는 NSMutableArray는
- (void) tick: (ccTime) dt
{
NSLog(@"%d",ticker);
if(fbut.Adown == YES && ticker > 4)//fbut is a button
{
elayer = [[effectsLayer alloc] init]; // each effectlayer draws a //projectile that moves forward 'x' ticks
elayer.e_playpos = glayer.playerpos; // player position
[self addChild:elayer z:2];
[mutable addObject: elayer];
[elayer release];
if(mutable.count > 20) // when there are 20 projectiles drawn, start //destroying the last one.
{
NSLog(@"mutable: %d", mutable.count);
[mutable removeLastObject];
}
ticker=0;
}
ticker++;
// . . .
이이
http://screencast.com/t/LpNHL2kJIVpu
20 개 이상의처럼 보이는
처럼 실행중인 프로그램은 모습입니다 ..흥미를 그래도 어레이는 20 개의 물체를 안정적으로 잡고 있습니다. 그래서 객체가 ([mutable removeLastObject];를 통해) '제거'되면 어떻게 화면에 나타나게 될까요?
이제 내가 초기화가 유지합니다 (*****의 확인)- (void) tick: (ccTime) dt
{
NSLog(@"%d",ticker);
if(fbut.Adown == YES && ticker > 4)//fbut is a button
{
elayer = [[effectsLayer alloc] retain]; // *********each effectlayer draws //a projectile that moves forward 'x' ticks
elayer.e_playpos = glayer.playerpos; // player position
[self addChild:elayer z:2];
[mutable addObject: elayer];
[elayer release];
if(mutable.count > 20) // when there are 20 projectiles drawn, start //destroying the last one.
{
NSLog(@"mutable: %d", mutable.count);
[mutable removeLastObject];
}
ticker=0;
}
ticker++;
// . . .
을 이제 더 효과 레이어가 그려지지되고있다로 변경
여기에 다음 피클은 ...하지만, 여전히 NSArray는 21-20 개의 객체를 포함합니다. 이러한 모든 개체는 초기화되지 않습니다. 그래서 끝 부분에 init을 추가했습니다 : elayer = [[[effectsLayer alloc] retain] init];
이제 이전과 동일한 효과가 있습니다.
그래서 내가 오토 릴리즈 .. 같은 효과를 많이하고 퓨 퓨 퓨의 많은, 방법이 더 내 목표는 (20)는 한 번에 그려 질 alowed가와 20은 한 번입니다
(20)에 비해 시도 그 (것)들은 할당 해제된다. 지금 당장은 할당 해제를하지 않으면 약 2000 분의 e 레이어가 있고 약 5 프레임이 될 때까지 약 4 분이 지나야 프로그램이 정상적으로 실행됩니다.
왜 우주선이 갑자기 꺼지지 않습니까?
(BTW 내가적인 Cocos2D 프레임 워크를 사용하고 있습니다)이 날에 의해 저작권 프로젝트, 알렉스 earley 2009 년
'addChild : z :'가 객체를 유지하지 않지만 참조를 어떻게 든 유지한다고해도 계층을 자식으로 추가했음을 의미합니다.하지만'dealloc '이므로 언젠가 충돌 할 것입니다. 에드. – Chuck
@Chuck +1 매우 사실입니다. –
또한 'addChild :'에 저장하지 않으면 20 개 항목으로 제한되지 않고 충돌이 발생할 수 있습니다. – bobDevil