我正在开发一个基本的游戏,它连接到服务器并获取JSON数据。它可以正常工作几个游戏,但不久后,由于内存压力崩溃。我跑过仪器,发现了一些相当令人不安的东西。几乎每个由[Class ]实例化的实例变量都是作为NSZombie对象泄漏的。
正如您在图像中所看到的,在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];
});有人能告诉我如何挽救这种局面,或者我做错了什么吗?
发布于 2014-05-01 08:32:53
这就是僵尸物体的本质。在僵尸对象被释放后打开僵尸对象来调试对象的使用显然会将任何这样的对象变成泄漏。您不能同时使用僵尸进行调试并搜索内存泄漏。
发布于 2014-05-01 08:22:50
我假设您的内存泄漏将由于内存中的NSData对象而发生。
您是否尝试将NSData保存到documents文件夹中,将其作为文件而不是NSData对象?
示例
[data writeToFile:filePath atomically:YES];https://stackoverflow.com/questions/23404278
复制相似问题