我正在使用仪器检查我的IOS应用程序的内存使用情况,并发现CFString一直在分配和增长。在我的代码中创建NSString对象时,我使用了StringWithFormat方法,而不是[[NSString alloc] init]。我怎么能阻止这个? 下图是仪器输出的屏幕截图。
如果缺少必要的问题信息,请告诉我。
答案 0 :(得分:0)
如果使用便捷构造函数创建大量临时对象,则最好使用自定义自动释放池块。 由于使用便捷构造函数创建的对象是自动释放的,因此可能无法立即释放。这就是内存使用量激增的原因。
来自Apple:
许多程序会创建自动释放的临时对象。这些 对象添加到程序的内存占用,直到结束 块。在许多情况下,允许临时对象累积 直到当前事件循环迭代结束才导致 过度开销;但是,在某些情况下,您可以创建一个 大量临时对象大量增加内存 足迹和你想要更快地处置。在这些 在后一种情况下,您可以创建自己的自动释放池块。在 块的结尾,临时对象被释放,这通常是 导致他们的释放,从而减少程序的内存 足迹。
http://www.cocoanetics.com/2009/08/understanding-autoreleasing/
答案 1 :(得分:0)
在我们的案例中,我发现NSStrings的连续泄漏(其中许多属于NSPlaceholderString类,它是类集群的一部分)是由于NSZombieEnabled在该方案中启用。
关闭它可以消除这种内存泄漏的来源。