CFString(不可变)内存使用量在IOS应用程序中不断增长

时间:2012-09-24 04:18:31

标签: ios memory memory-management memory-leaks instruments

我正在使用仪器检查我的IOS应用程序的内存使用情况,并发现CFString一直在分配和增长。在我的代码中创建NSString对象时,我使用了StringWithFormat方法,而不是[[NSString alloc] init]。我怎么能阻止这个? 下图是仪器输出的屏幕截图。

如果缺少必要的问题信息,请告诉我。

Instrument's screenshot

2 个答案:

答案 0 :(得分:0)

如果使用便捷构造函数创建大量临时对象,则最好使用自定义自动释放池块。 由于使用便捷构造函数创建的对象是自动释放的,因此可能无法立即释放。这就是内存使用量激增的原因。

来自Apple

  

许多程序会创建自动释放的临时对象。这些   对象添加到程序的内存占用,直到结束   块。在许多情况下,允许临时对象累积   直到当前事件循环迭代结束才导致   过度开销;但是,在某些情况下,您可以创建一个   大量临时对象大量增加内存   足迹和你想要更快地处置。在这些   在后一种情况下,您可以创建自己的自动释放池块。在   块的结尾,临时对象被释放,这通常是   导致他们的释放,从而减少程序的内存   足迹。

http://www.cocoanetics.com/2009/08/understanding-autoreleasing/

答案 1 :(得分:0)

在我们的案例中,我发现NSStrings的连续泄漏(其中许多属于NSPlaceholderString类,它是类集群的一部分)是由于NSZombieEnabled在该方案中启用。

关闭它可以消除这种内存泄漏的来源。