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