首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何调试NSZombies &内存泄漏?

如何调试NSZombies &内存泄漏?
EN

Stack Overflow用户
提问于 2014-05-01 08:17:43
回答 2查看 252关注 0票数 1

我正在开发一个基本的游戏,它连接到服务器并获取JSON数据。它可以正常工作几个游戏,但不久后,由于内存压力崩溃。我跑过仪器,发现了一些相当令人不安的东西。几乎每个由[Class ]实例化的实例变量都是作为NSZombie对象泄漏的。

正如您在图像中所看到的,在5秒内,我似乎已经产生了9000条泄漏。

我在用ARC。

进一步的分析表明,我在使用某些方法时出现了泄漏:

代码语言:javascript
复制
-(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方法。

代码语言:javascript
复制
dispatch_async(kBackgroundQueue, ^{
        NSData* data = [NSData dataWithContentsOfURL:completeUrl];
        [self performSelectorOnMainThread:@selector(startMethod:) withObject:data   waitUntilDone:YES];

    });

有人能告诉我如何挽救这种局面,或者我做错了什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-01 08:32:53

这就是僵尸物体的本质。在僵尸对象被释放后打开僵尸对象来调试对象的使用显然会将任何这样的对象变成泄漏。您不能同时使用僵尸进行调试并搜索内存泄漏。

票数 2
EN

Stack Overflow用户

发布于 2014-05-01 08:22:50

我假设您的内存泄漏将由于内存中的NSData对象而发生。

您是否尝试将NSData保存到documents文件夹中,将其作为文件而不是NSData对象?

示例

代码语言:javascript
复制
[data writeToFile:filePath atomically:YES];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23404278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档