2010-10-27 24 views
2

您好,我正在开发一个iPhone应用程序,它提供图像和文本的信息。在每个文本有一个图像,其可以被点击和缩放,用一个UIImageView在iPhone上混淆内存分配错误

NSString* imgName = [imgPath substringToIndex:[imgPath rangeOfString:@".jpg"].location]; 
UIImage* img = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:imgName ofType:@"jpg"]]; 
[imgView setImage:img]; 

示为本人经过图像通过由一个打开它们一个应用程序崩溃(器件调试)。在控制台一些错误:

:解压缩错误 my_app_name(1226,0x3e088868)malloc的:* MMAP(大小= 32768)失败(错误代码= 12) *错误:不能分配区域

然后:

CoreAnimation:未能分配2228352字节。

我没有代码泄漏,如果我不打开图像,我不会得到错误。所以没有人有这个问题的线索?

回答

1

似乎你使用的内存太多?

你打开了多少张图片?从连接的仪器开始,观察内存占用情况。

请记住,图像在加载时需要比在磁盘上压缩更多的内存。

+0

嗨荣子谢谢你的回复。当我打开约30张图像时,它会崩溃,但是当我打开一张新图像时,我总是释放旧图像。所有图像都在100kb以下(在Mac上)。 – boreas 2010-10-27 10:45:48

+0

该仪器显示一个整体分配的内存15Mb,这主要是由我的语音输出的东西。我看到一些类似的Malloc 1 + Mb,由CG Graphics调用,我不明白这是怎么回事。 – boreas 2010-10-27 10:48:24

+2

加载时需要关于pixels_hor * pixels_ver * 4个字节的图像,并且错误消息指示它需要大约2 MB。也许检查他们是否真的被释放。仪器给出了一个很好的内存使用图。 – Eiko 2010-10-27 10:50:56

0

尝试在本地自动发布池中包装您的分配/发布。

2

哦,我想我终于修好了。是的,我的图片相对较大,大小约700 * 600。

该问题似乎在[imgView setImage:img]; img虽然被释放,但不知何故仍在记忆中,我不知道。在释放imgView dealloc之前,一行代码[imgView setImage:nil];修复了这个问题。

谢谢你的帮助。

+1

真的吗?这解决了你的问题?听起来很奇怪。 – steipete 2012-01-09 16:03:18

+0

我在分配和释放几个显示各种文档的UIWebView之后,有相同的“CoreAnimation:未能分配”错误;显然这些在发布webViews后继续使用内存。在阅读这个解决方案之后,我尝试在释放之前调用[webView loadHTMLString:@“”baseURL:nil],并解决了问题! – arlomedia 2012-06-27 00:41:21