Iphone 即使没有有效的内存泄漏,我的应用程序也会收到内存警告

Iphone 即使没有有效的内存泄漏,我的应用程序也会收到内存警告,iphone,objective-c,ios,memory-leaks,Iphone,Objective C,Ios,Memory Leaks,我的通用iOS应用程序出现了这个奇怪的问题。在分析应用程序时,我在instruments tool中没有看到任何有效的内存泄漏。每次页面更改时,分配的大小仍会不断增加50-100KB。泄漏仪表仅显示一些泄漏,责任调用方为mem_alloc 使用一段时间后,应用程序开始接收内存警告,再过一段时间,应用程序就会崩溃。有趣的是,此时的总内存分配在6到12MB之间变化。当我在调试模式下回溯时,应用程序也不会显示任何堆栈信息 我完全不知道为什么会发生这次撞车。任何帮助都将不胜感激 附加我的仪器的一些屏幕

我的通用iOS应用程序出现了这个奇怪的问题。在分析应用程序时,我在instruments tool中没有看到任何有效的内存泄漏。每次页面更改时,分配的大小仍会不断增加50-100KB。泄漏仪表仅显示一些泄漏,责任调用方为mem_alloc

使用一段时间后,应用程序开始接收内存警告,再过一段时间,应用程序就会崩溃。有趣的是,此时的总内存分配在6到12MB之间变化。当我在调试模式下回溯时,应用程序也不会显示任何堆栈信息

我完全不知道为什么会发生这次撞车。任何帮助都将不胜感激



附加我的仪器的一些屏幕截图。

您需要在应用程序中使用以下内容检查内存分配-

  • 使用
    仪器
    检查
    分配
    泄漏

  • 使用静态存储器分析仪检查静态存储器泄漏。 要使用此选项,请使用“cmd+shift+B”或转到“Xcode->Product->Analyze”


  • 此外,您还需要确保视图控制器的正确释放。

    您需要在应用程序中使用以下命令检查内存分配-

  • 使用
    仪器
    检查
    分配
    泄漏

  • 使用静态存储器分析仪检查静态存储器泄漏。 要使用此选项,请使用“cmd+shift+B”或转到“Xcode->Product->Analyze”


  • 您还需要确保视图控制器的正确释放。

    虽然我问这个问题已经很久了,但没有得到任何正确的答案。回过头来看我的问题,我认为这个问题的解决方案将对其他早期创业者有所帮助。因此,我在这里发布了我的有效解决方案:

    这次事件的真正罪魁祸首是我在应用程序中使用图像的方式。我只是通过调用[UIImage ImageName:]来使用它。实际上,这种方法会泄漏图像大小的内存

    此问题的解决方案是通过调用ImageWithData来使用image(请参见下面的代码):


    希望这对某人有所帮助。

    虽然我问这个问题已经很久了,但没有得到任何正确的答案。回过头来看我的问题,我认为这个问题的解决方案将对其他早期创业者有所帮助。因此,我在这里发布了我的有效解决方案:

    这次事件的真正罪魁祸首是我在应用程序中使用图像的方式。我只是通过调用[UIImage ImageName:]来使用它。实际上,这种方法会泄漏图像大小的内存

    此问题的解决方案是通过调用ImageWithData来使用image(请参见下面的代码):



    希望这对其他人有所帮助。

    您使用过静态内存分析器吗?我对静态内存分析器一无所知。你能给我解释一下吗?你试过静态内存分析器吗?我对静态内存分析器一无所知。你能给我解释一下吗?谢谢你的快速回答。我已经完成了你提到的两件事,并且在那之后才提出了这个问题。你能展示一下你的乐器的屏幕截图吗,内存使用的确切位置。给我一些时间,我会把它贴在这里。附上我乐器的一些屏幕截图。你们能看一看并告诉我你们是否注意到了什么吗?在看到这一点之后,你们的控制器似乎并没有被正确释放,或者你们只是在推控制器,从来并没有给它们通电。再告诉我一件事,你是否也在处理应用程序中的一些图像?谢谢你的快速回答。我已经完成了你提到的两件事,并且在那之后才提出了这个问题。你能展示一下你的乐器的屏幕截图吗,内存使用的确切位置。给我一些时间,我会把它贴在这里。附上我乐器的一些屏幕截图。你们能看一看并告诉我你们是否注意到了什么吗?在看到这一点之后,你们的控制器似乎并没有被正确释放,或者你们只是在推控制器,从来并没有给它们通电。再告诉我一件事,你是否也在处理应用程序中的一些图像?从最初的帖子中不清楚你是否在使用ARC。如果您使用的是手动引用计数,您如何确定这不是您对UIImage文件的处理?我很难相信一个Apple framework类方法已经以这种方式泄漏内存超过2年,并且没有引起注意。@mckeejm这个问题早在2012年就被问到了,当时我使用的是非ARC代码。我同意你的观点,苹果框架类方法不应该像这样泄漏内存,我说它泄漏内存可能是错误的。实际上,imageNamed函数缓存图像数据,最终会占用内存。此外,如果您搜索imageNamed函数和imageWithData之间的比较,人们会建议您使用imageWithData。从原始帖子中不清楚您是否使用了ARC。如果您使用的是手动引用计数,您如何确定这不是您对UIImage文件的处理?我很难相信一个Apple framework类方法已经以这种方式泄漏内存超过2年,并且没有引起注意。@mckeejm这个问题早在2012年就被问到了,当时我使用的是非ARC代码。我同意你的观点,苹果框架类方法不应该像这样泄漏内存,我说它泄漏内存可能是错误的。实际上,imageNamed函数缓存图像数据,最终会占用内存。此外,如果您搜索imageNamed函数和imageWithData之间的比较,人们会建议您使用imageWithData。
    NSString *fileLocation = [[NSBundle mainBundle] pathForResource:fileName ofType:extension];
    NSData *imageData = [NSData dataWithContentsOfFile:fileLocation];
    [UIImage imageWithData:imageData];