記憶體管理

何時使用 weak-keyword:

如果在持有引用的物件的生命週期內可以釋放引用的物件,則應使用 weak 關鍵字。

何時使用 unowned-keyword:

如果在引用引用的物件的生命週期內不期望引用物件被釋放,則應使用 unowned 關鍵字。

陷阱

一個常見的錯誤是忘記建立物件的引用,這些物件在函式結束後需要繼續存在,比如位置管理器,運動管理器等。

例:

class A : CLLocationManagerDelegate
{
    init()
    {
        let locationManager = CLLocationManager()
        locationManager.delegate = self
        locationManager.startLocationUpdates()
    }
}

此示例將無法正常工作,因為在初始化程式返回後取消分配位置管理器。正確的解決方案是建立一個強引用作為例項變數:

class A : CLLocationManagerDelegate
{
    let locationManager:CLLocationManager

    init()
    {
        locationManager = CLLocationManager()
        locationManager.delegate = self
        locationManager.startLocationUpdates()
    }
}