Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 记忆问题-生活与总体->;应用程序被杀死_Ios_Memory Management_Didreceivememorywarning_Xcode Instruments_Memory Warning - Fatal编程技术网

Ios 记忆问题-生活与总体->;应用程序被杀死

Ios 记忆问题-生活与总体->;应用程序被杀死,ios,memory-management,didreceivememorywarning,xcode-instruments,memory-warning,Ios,Memory Management,Didreceivememorywarning,Xcode Instruments,Memory Warning,我试图检查我的应用程序在仪器中的内存问题。加载应用程序时,我会播放一些声音,并在UIImageView中显示一些动画。 为了节省一些内存,我只在需要时加载声音,当我停止播放时,我从内存中释放声音 问题1: 我的应用程序使用了大约5.5MB的内存。但在开始到20MB之后,整个部分都在增长,然后慢慢增长(大约100kB/秒)。但负责任的库是OpenAL(OAL::Buffer)、dyld(dyld\U start)——我不确定这到底是什么,还有其他一些东西,比如ft\U mem\U qrealloc

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

问题1:

我的应用程序使用了大约5.5MB的内存。但在开始到20MB之后,整个部分都在增长,然后慢慢增长(大约100kB/秒)。但负责任的库是OpenAL(OAL::Buffer)、dyld(dyld\U start)——我不确定这到底是什么,还有其他一些东西,比如ft\U mem\U 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文件加载图像(这也适用于我的其他主题:) 我有几个UIImageView,当我设置动画数组来播放动画时

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

消除内存泄漏的建议:

1) 使用ARC的iOS5功能

2) 使用进一步检查项目中的内存泄漏

希望这有帮助

肌肉肌肉声*声音=[[肌肉肌肉声alloc] initWithSoundFile:文件名将重复:否]

你永远不会发布这个。分配时您的保留计数为1

在数组中调用replace或将数组索引设置为NSNull, 不会释放对象


您必须对存储的每个声音实例调用release。

但是我在这个项目中使用了ARC->所以如果您的意思是使用[sound release],我认为在ARC下是不允许的。这是对的还是你在说别的什么?1,是的。此项目已在使用ARC。2、谢谢。它帮助我发现了CGImageRef及其CGImageRelease的一些问题。但这并没有帮助我发现整体记忆的增长,或者问题是整体记忆还是其他地方的记忆…:(Xcode中的分析帮助您指出所有与代码相关的内存泄漏,而不仅仅是CGImageRelease和CGImageRefYes。我知道。事实上,它只向我显示了CGImageRef问题和一些从未使用过的变量等等。我的代码没有大问题。我应该启用什么选项吗?我只是进入了产品->分析和lo我在左面板中看到了蓝色的问题(或我代码中突出显示的蓝色线条)。并修复了所有问题。但我的“总体内存”仍在增加。我认为这是由于我的UIImageView动画-我正在切换UIImageView动画数组。是否有+-个“保存”图像动画帧计数(或内存中的大小)?