单例和扩展之间的实际区别?

时间:2018-12-14 09:03:43

标签: swift singleton

我需要在整个应用程序中共享用户的当前位置,最初我为此创建了一个单例(由位置管理器更新,可以在任何地方访问):

final class CurrentLocation {

    static let shared = CurrentLocation()
    var coordinates: CLLocationCoordinate2D?

    private init() {}

}

if let currentLocation = CurrentLocation.shared.coordinates {
    //
}

然后我想扩展UIDevice以实现相同的效果而无需单例(由位置管理器更新并可以在任何地方访问):

extension UIDevice {

    static var coordinates: CLLocationCoordinate2D?

}

if let currentLocation = UIDevice.coordinates {
    //
}

从实际意义上讲,有什么区别吗?单例通常被伪装成全局变量,但扩展名不是一样的吗?

1 个答案:

答案 0 :(得分:0)

大致相同。在内存管理方面,它们是完全相同的。因为两者在内存中分配的大小相同,即sizeof(CLLocationCoordinate2D)。但是就缓存和cpu而言,扩展比单例更好。因为首先您必须访问currentLocation对象以获取协调。