了解分析和内存泄漏

时间:2014-05-26 12:56:37

标签: ios objective-c xcode memory-leaks

使用Profile中的XcodeLeaks tool,我正在寻找代码中的泄漏。 我打开call Tree,然后查看我在那里看到的功能。

Xcode将带您进入代码并为线条着色。有时它的颜色是红色,当然是泄漏,但有时,它是浅棕色的,并且在线附近有一个数字说:20.5%

我试图了解这个数字的含义,以及颜色的含义是什么?

我在这行代码中得到了这条棕色线:

textL=[[UILabel alloc] initWithFrame:CGRectMake(A+B+C,A,view.frame.size.width-A-B-C-A, B)];

这显然不是泄漏,但是,这行代码使用for循环的一部分并创建超过100次,以添加到scrollview中的单元格。还有什么东西我也要在这里改变吗?

编辑:

我有这个类是UIView的子类,这个类有对标签和imageViews(@properties)的强引用。稍后我将创建此类的许多实例作为添加到scrollvoiew的视图,并将它们保存到数组中。这可能是问题吗?我在那个班级有很强的参考资料?

感谢。

2 个答案:

答案 0 :(得分:1)

红线显示内存泄漏最多,棕色线显示内存泄漏但不是那么大。百分比显示该方法泄漏了多少内存(存在所有内存泄漏)

当您运行Leaks测试时,您会看到类似的内容 -

Memory leak result 选择泄漏时,您会看到所有泄漏,如(读取行) - 您可以在右侧显示“扩展详细信息”视图。它将显示所选内存泄漏的调用树 在我的例子中,它指出我正在泄漏“[CardGameViewController viewDidLoad]”

在“调用树”视图中,百分比显示该方法泄漏了所有内存的数量。您可以在调用树中的许多位置泄漏内存。它可以帮助您找到内存泄漏最多的地方并先修复它 这个百分比对性能优化非常有用。

Memory leak

答案 1 :(得分:0)

你说分配UILabel的那条线是“#34;显然不是泄密。”#34;它可能不是泄漏的来源,但它是后来泄漏的对象的分配。

当Instruments通知您泄漏时,它没有通知您导致泄漏的违规行代码(因为它无法知道),而只是告诉您泄露的物体是原始分配的。

因此,它突出显示这一行代码的事实表明这个项目正在被泄露(例如,由于强大的参考周期,可能导致这行代码泄漏的视图控制器在任何保持强引用的对象中,例如此标签,也要泄漏)。泄漏中涉及其他对象的事实进一步证明,UILabel仅占泄漏的20.5%。