如何在ARC中释放内存以获得高内存使用率的图形渲染?

piz*_*lms 4 memory core-graphics core-image ios automatic-ref-counting

首先,感谢本网站上的所有人...这对于深入了解iOS编程非常有帮助.

我目前的问题:

我有一个应用程序,呈现一个非常风格化的照片版本.它为其中一些使用了一些CoreImage过滤器,但需要一堆CoreGraphics来完成繁重的图像处理.

代理大小渲染效果很好,但是当我渲染我的图像的完整分辨率版本时,它有时因内存使用率过高而崩溃.问题是我需要能够在渲染时在内存中有几个全分辨率(3264x2448)缓冲区.我不知道什么或如何释放更多的记忆.我一直非常小心地匹配CGImageRelease到处都可以.

使用ARC,我如何知道某些内容是否真正被释放并释放?将对象设置为nil实际上并没有做任何事情.

我怀疑我可以以任何方式将其传输到磁盘.

任何建议都将非常感谢!

谢谢!

Mac*_*ade 8

ARC在这样的背景下没有任何区别.

这只是意味着你不必release自己打电话.

对于非ARC,在内存不足的情况下,您可能希望发布一些您并不真正需要的属性(这意味着可以根据需要重新创建它们).

- ( void )didReceiveMemoryWarning:
{
    [ _myProperty release ];

    _myProperty = nil;

    [ super didReceiveMemoryWarning ];
}
Run Code Online (Sandbox Code Playgroud)

在ARC下,它完全相同,除了你不必打电话release:

- ( void )didReceiveMemoryWarning:
{
    _myProperty = nil;

    [ super didReceiveMemoryWarning ];
}
Run Code Online (Sandbox Code Playgroud)

nil在ARC下将您的属性设置为将自动释放它.
所以它真的有所作为.

如果它不适合你,那么你肯定会有另一个问题.
确保没有内存泄漏,也不保留周期.

最后一个肯定是问题......