我需要在整个应用程序中共享用户的当前位置,最初我为此创建了一个单例(由位置管理器更新,可以在任何地方访问):
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 {
//
}
从实际意义上讲,有什么区别吗?单例通常被伪装成全局变量,但扩展名不是一样的吗?
答案 0 :(得分:0)
大致相同。在内存管理方面,它们是完全相同的。因为两者在内存中分配的大小相同,即sizeof(CLLocationCoordinate2D)。但是就缓存和cpu而言,扩展比单例更好。因为首先您必须访问currentLocation对象以获取协调。