저는 서버에 연결하여 JSON 데이터를 가져 오는 기본 게임을 진행하고 있습니다. 그것은 약간 게임을 위해 잘 작동하고, 그러나 기억 압력 때문에 곧 후에 부서집니다. 나는 도구를 훑어 보았고 다소 불안해하는 것을 보았습니다. [[Class alloc] init에 의해 인스턴스화 된 거의 모든 인스턴스 변수가 NSZombie 객체로 유출되었습니다.NSZombies & Memory Leaks를 디버깅하는 방법은 무엇입니까?
이미지에서 볼 수 있듯이 5 초 만에 9000 개의 누출이 발생했습니다.
저는 ARC를 사용하고 있습니다.
-(void) playTimeUp
{
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
pathForResource:@"Gameover"
ofType:@"wav"]];
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
if (audioPlayer && soundShouldPlay){
[audioPlayer setDelegate:self];
[audioPlayer prepareToPlay];
[audioPlayer setVolume:.20];
[audioPlayer play];
[self.audioPlayers addObject:audioPlayer];
}
}
또한 나는 꽤 자주 dataWithContentsOfUrl 방법을 사용
추가 분석은 특정 방법을 사용할 때 내가 유출했다 보여 주었다.
dispatch_async(kBackgroundQueue, ^{
NSData* data = [NSData dataWithContentsOfURL:completeUrl];
[self performSelectorOnMainThread:@selector(startMethod:) withObject:data waitUntilDone:YES];
});
아무도이 상황을 복구하는 방법이나 내가 잘못하고있는 것을 말해 줄 수 있습니까?
'NSZombieEnabled'가'true '로 설정되어 있습니까? 그렇다면 @ gnasher729가 말했듯이, 어떤 객체도 실제로 할당 해제되지 않습니다 (모두 메모리에 남아 있습니다). 그래서 곧 많은 메모리를 사용할 것입니다. 좀비를 활성화시켜 특정 충돌을 추적 한 다음 다시 사용할 수 없게해야합니다. –