我有一个带有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上测试)但有时会出现内存问题......
非常感谢
答案 0 :(得分:0)
一旦您拥有这些图像,就需要发布这些图像。
答案 1 :(得分:0)
也许您将在分配工具中尝试“快照”功能。只需在第一个控制器启动时选择“Mark Heap”,然后导航并再次返回。拿另一个快照。重复此过程8-10次。在快照列表中,您将看到已在快照和后续快照之间分配了一些内存(否则,如果数量很小且趋于零则是正常的),请尝试检查它以检查是否分配了剩余的内容活着。
答案 2 :(得分:0)
如果您使用[[UIImage alloc] init ...]创建它们,则负责释放UIImage的实例。
如果要从主包中加载图像,请尝试使用+(UIImage *)imageNamed:(NSString *)名称。返回的UIImage是自动释放的,因此您不必释放,并且在使用imageNamed方法时UIKit处理缓存的好处。