2012-09-24 44 views
4

我正在使用工具检查IOS应用程序的内存使用情况,并发现CFString不断分配和增长。在我的代码中创建NSString对象时,我使用了StringWithFormat方法,不像[[NSString alloc] init]。我怎样才能阻止呢? 以下图像是仪器输出的屏幕截图。在iOS应用程序中CFString(不可变)内存使用量不断增加

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

Instrument's screenshot

+0

您可以尝试使用ARC ...无论如何,您都可以浏览Instruments中每个列出的对象(以及每个eventq的相关调用堆栈)的保留/释放事件,以帮助您追踪问题的根源。最后,尝试使用Xcode中的Analyze构建样式来查看静态分配器是否指出任何潜在的保留/释放问题。 – nielsbot

+0

请显示正在创建字符串的方法。 – trapper

+0

@Ryo您的问题是否解决?你为此尝试了什么?请告诉我。我也面临同样的问题。 –

回答

0

是,如果你正在创建大量的使用便利构造临时对象的使用自定义自动释放池块一个很好的做法。 由于使用便利构造函数创建的对象是自动释放的,因此它们可能不会立即释放。这是内存使用量激增的原因。

Apple

许多程序创建的自动释放临时对象。这些 对象将添加到程序的内存占用空间直到 块的末尾。在许多情况下,允许临时对象累积 ,直到当前事件循环迭代结束时,不会导致 过多的开销;但是,在某些情况下,您可能会创建大量的临时对象,这些对象大大增加了内存的占用空间,并且希望更快地处理这些对象。在后面这些情况下,您可以创建自己的自动释放池块。在块的末尾 处,释放临时对象,这通常会导致它们的释放,从而减少程序的内存占用量 。

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

0

在我们的情况下,我发现NSString的(其中许多类NSPlaceholderString这是该类群的一部分)的持续泄漏是由于NSZombieEnabled该计划正对。

把它关掉消除了这个内存泄漏的来源。