内存管理
何时使用 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()
}
}