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

5
我正在使用Instruments检查我的IOS应用程序的内存使用情况,并发现CFString不断被分配和增长。在我的代码中创建NSString对象时,我使用了StringWithFormat方法,而不是像[[NSString alloc] init]这样的方法。我该如何停止这种情况?以下是Instrument输出的屏幕截图。
请告诉我问题是否缺少必要的信息。

@Ryo,你的问题解决了吗?你尝试过什么来解决它?请告诉我。我也遇到了同样的问题。 - Pooja M. Bohora
@Pooja M. Bohora:你能找到解决方案吗? - BaSha
@PoojaM.Bohora:那么有什么替代方案吗? - BaSha
NSMutableString *result=@""; [result appendFormat:@""]; - Pooja M. Bohora
@PoojaM.Bohora,如果您找到任何解决方案,能否请您帮忙? - BhavikKama
显示剩余3条评论
2个回答

0
在我们的情况下,我发现NSStrings不断泄漏(其中许多是类簇的一部分的NSPlaceholderString类)是由于方案中开启了NSZombieEnabled导致的。
关闭它可以消除这种内存泄漏的来源。

0

如果您使用方便构造函数创建大量临时对象,那么使用自定义自动释放池块是一个好的实践。

由于使用方便构造函数创建的对象是自动释放的,它们可能不会立即释放。这就是内存使用量激增的原因。

来自Apple

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接