2016-11-30 331 views
1

测试我projectInstruments,和最后我发现了一个memory leakUIView的类别:UIView+RSAdditions内存泄漏:

The memory leak

下面的代码:

- (void)setHeight:(CGFloat)height { 
    CGRect frame = self.frame; 
    frame.size.height = height; 
    self.frame = frame; // this code cause memory leak 
} 

我还搜索了我的project,并在这里找到了一些相同的方法名称:

The method name is the same

这些相同的方法是否会影响内存泄漏?我对memory leak的理由感到困惑。

回答

0

根据我的经验。仪器并没有真正告诉你哪条线路导致泄漏。它只是告诉你,该行被包含在导致泄漏的堆栈轨迹之一中。它只是帮助你更容易地跟踪泄漏,因为你会知道程序如何流动。你必须在你自己的基础上跟踪仪器给你的堆栈轨迹。

这里是从仪器的堆栈跟踪的样本截图:

enter image description here

从我以前的调试,这些都是我的错误,导致下ARC

  • 内存泄漏设置的强引用一个父对象在一个子对象中。这导致一个保留周期 。
  • 在界面中设置对委托的强引用。
  • 当您在 转让所有权后进行免费桥接时,忘记释放对象。
  • 忘记设置一个弱引用您在 通过块的对象。

我希望帮助

+0

什么的平均'做转移owenership'后免费桥接? – aircraft

+0

@aircraft就像你要将一个NSArray转换为CFArrayRef并保留它:CFArrayRef arrayRef =(__bridge_retained)anNSArray;现在,你保留它。你需要像CFRelease()或其他东西一样释放它 –