2016-11-30 334 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()或其他東西一樣釋放它 –