内存管理

何时使用 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()
    }
}