在基于导航的iphone应用程序中,内存一直在增加

时间:2010-08-23 21:19:02

标签: iphone memory memory-leaks

我有一个带有5个ViewControllers的导航应用程序。在用仪器检查内存分配后,我发现内存永久增加。该应用程序以2 MB启动,在浏览了所有5个Navigationcontrollers之后,它增长到10 MB并计数... 对于每个已分配的对象,我的代码中都有相应的版本(在dealloc或其他地方),所以很明显没有内存泄漏。仪器还告诉我,没有发现内存泄漏。

如何解决此内存问题?在某些时候,在向前和向后浏览视图后,会出现内存不足警告并且背景图像消失(我不会释放图像以便iphone自行完成)。

如何确定“内存泄漏”问题的根源?只要应用程序还活着,图像是否可以在某处缓存并保留在内存中?

我总是像这样分配图像:

UIImage *kaufpreisImage = [[UIImage alloc] initWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"kaufpreis_background_green18px" ofType:@"png"]];

图像位于资源文件夹下。

我非常感谢你的帮助!我无法找到出路!

非常感谢您提前

关心菲尔

编辑:

剩下的唯一问题是当我尝试发送电子邮件时。我想发送一封电子邮件,其中包含电子邮件正文中的多个html表格和图像。图像是base64编码的。发送多封邮件后,我收到内存不足警告,虽然我在sendMail()方法中解除了所有内容(图像,数字等)。

是否有人知道发送base64编码图像是否会导致问题?任何人都可以给我一个暗示我如何在电子邮件体内发送图像的提示(例如作为html表格中的背景图像,如style =“background-url(data:image / png; base64,%@)”)?要清除,这是有效的。图像被发送到客户端(在MacOS上测试)但有时会出现内存问题......

非常感谢

3 个答案:

答案 0 :(得分:0)

一旦您拥有这些图像,就需要发布这些图像。

答案 1 :(得分:0)

也许您将在分配工具中尝试“快照”功能。只需在第一个控制器启动时选择“Mark Heap”,然后导航并再次返回。拿另一个快照。重复此过程8-10次。在快照列表中,您将看到已在快照和后续快照之间分配了一些内存(否则,如果数量很小且趋于零则是正常的),请尝试检查它以检查是否分配了剩余的内容活着。

答案 2 :(得分:0)

如果您使用[[UIImage alloc] init ...]创建它们,则负责释放UIImage的实例。

如果要从主包中加载图像,请尝试使用+(UIImage *)imageNamed:(NSString *)名称。返回的UIImage是自动释放的,因此您不必释放,并且在使用imageNamed方法时UIKit处理缓存的好处。