2016-11-07 42 views
1

我一直在使用儀器分析時遭受內存泄漏。內存泄漏當自定義UIViewController的子類

所以情況是我有一個從UIViewController繼承的父AVC和一個名爲BVC的AVC的子類。這個BVC有一個輔助類的實例,它在viewDidLoad上被初始化。那麼,樂器聲稱在viewDidLoad上有內存泄漏。

Instruments output

這是我用來重現問題的示例代碼。奇怪的是,如果「a」是AVC的成員並且在BVC「A」中初始化,它不會泄漏。

import UIKit 

class A 
{ 
} 

class AVC: UIViewController 
{ 
    override func viewDidLoad() 
    { 
     super.viewDidLoad() 
    } 
} 

class BVC: AVC 
{ 
    var a: A! 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 

     a = A() 
    } 
} 

所以問題是,爲什麼「a」泄漏時,它是一個BVC的實例,而不是AVC?此外,這兩種情況下都會捕獲內存圖。

Memory graph

感謝

回答

0

你應該申報爲

var a: A? 

從來沒有使用強制解除綁定自選的。

+0

這根本不是問題,也沒有回答這個問題。此外,在我的實際應用程序中,「a」不應該是零,我不能直接在它聲明的同一行中初始化它,所以優雅的解決方案是強制解包,這是解壓的實際用法之一。 –