0

我试图检查我的仪器中的应用程序内存问题。当我加载应用程序时,我会播放一些声音并在UIImageView中显示一些动画。 为了节省一些内存,我只在需要时才加载声音,当我停止播放时,我将它从内存中释放。内存问题 - 生活与整体 - >应用程序被杀

问题1:

我的应用程序正在使用大约生活内存5.5MB。但总体部分在开始到20MB之后正在增长,然后它正在缓慢增长(大约100kB /秒)。但是,负责图书馆的OpenAL(OAL ::缓冲区),使dyld(_dyld_start)-I我不知道这真的是,和一些其他的东西像ft_mem_qrealloc,CGFontStrikeSetValue,...

问题2:

当整体节大约30MB,应用程序崩溃(被杀害)。 根据我已经读过的有关整体内存的事实,这意味着我的所有分配和释放约为30MB。但我真的不明白这个问题。当我需要一些声音例如我加载它的内存,当我不再需要它时,我释放它。但是这意味着当我加载1MB声音时,此操作会增加2MB的整体内存使用量。我对吗?当我加载10个声音时,我的应用程序崩溃,只是因为我的整体过高甚至生活的事实仍然很低? 我对此很困惑。

有人可以帮我清除它吗?

(我在iOS 5和使用ARC)

一些代码:

创造声音的OpenAL:

MYOpenALSound *sound = [[MyOpenALSound alloc] initWithSoundFile:filename willRepeat:NO]; 

if(!sound) 
    return; 

[soundDictionary addObject:sound]; 

播放:

[sound play]; 

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, ((sound.duration * sound.pitch) + 0.1) * NSEC_PER_SEC), dispatch_get_current_queue(), ^{ 
[soundDictionary removeObjectForKey:[NSNumber numberWithInt:soundID]]; 
    }); 
} 

创建与声音AVAudioPlayer:

[musics replaceObjectAtIndex:ID_MUSIC_MAP withObject:[[Music alloc] initWithFilename:@"mapMusic.mp3" andWillRepeat:YES]]; 

pom = [musics objectAtIndex:musicID]; 
[pom playMusic]; 

,并停止和释放它:

[musics replaceObjectAtIndex:ID_MUSIC_MAP withObject:[NSNull null]]; 

和图像动画: 我加载从大的PNG文件中的图像(这也realated到我的其他话题:https://stackoverflow.com/questions/12223714/memory-warning-uiimageview-and-its-animations) 我有几个的UIImageViews和时间我设置动画阵列来播放动画...

UIImage *source = [[UIImage alloc] initWithCGImage:[[UIImage imageNamed:@"imageSource.png"] CGImage]]; 

cutRect = CGRectMake(0*dimForImg.width,1*dimForImg.height,dimForImg.width,dimForImg.height); 
image1 = [[UIImage alloc] initWithCGImage:CGImageCreateWithImageInRect([source CGImage], cutRect)]; 
cutRect = CGRectMake(1*dimForImg.width,1*dimForImg.height,dimForImg.width,dimForImg.height); 
... 
image12 = [[UIImage alloc] initWithCGImage:CGImageCreateWithImageInRect([source CGImage], cutRect)]; 

NSArray *images = [[NSArray alloc] initWithObjects:image1, image2, image3, image4, image5, image6, image7, image8, image9, image10, image11, image12, image12, image12, nil]; 

,这阵我只是用简单的喜欢:

myUIImageView.animationImages = images, ... duration -> startAnimating 
+0

分享一些代码花花公子 – AppHandwerker

回答

1

删除内存泄漏的建议:

1)使用ARC的iOS5功能。

2)此外结帐使用this

希望项目中的内存泄漏这有助于

+0

1,是的。这个项目已经在使用ARC了。 2,谢谢。它帮助我找到了CGImageRef及其CGImageRelease的一些问题。但它并没有帮助我发现不断增长的整体内存,或者如果问题出在整体或其他地方...... :( – D33

+0

** Xcode中的**分析**可以帮助您指出所有与代码相关的内存泄漏,并且不仅CGImageRelease和CGImageRef –

+0

是的,我知道,实际上它只显示了CGImageRef问题,很少有从未使用过的变量等等,不是我的代码中的一个大问题,有没有我应该启用的选项或者什么?进入产品 - >分析,并在左侧面板中查看蓝色问题(或代码中蓝色突出显示的行),并修复了所有问题,但我的“整体内存”仍然在增加,我认为这是由于我的UIImageView动画 - 我正在切换UIImageView动画数组,有没有+“数量的”保存“图像动画帧数(或内存大小)? – D33

0

MYOpenALSound *声音= [[MyOpenALSound的alloc] initWithSoundFile:文件名willRepeat:NO];

你永远不会释放这个。您的分配保留计数为1。

调用替换数组中的in或将数组索引设置为NSNull, 不释放该对象。

您必须针对要存储的声音的每个实例调用释放。

+0

但我在这个项目上使用ARC - >所以如果你的意思是使用[声音发布] ,我认为在ARC下是不允许的它是正确的还是你在谈论别的? – D33

相关问题