Практическая разница между синглтоном и расширением? - PullRequest
0 голосов
/ 14 декабря 2018

Мне нужно поделиться текущим местоположением пользователя во всем приложении, и первоначально я создал для этого синглтон (обновленный диспетчером местоположений, доступный из любого места):

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 голосов
/ 14 декабря 2018

В основном то же самое.С точки зрения управления памятью они точно такие же.Потому что оба выделяют одинаковый размер sizeof (CLLocationCoordinate2D) в памяти.Но с точки зрения кэша и процессора расширение лучше, чем синглтон.Потому что сначала вам нужно получить доступ к объекту currentLocation, чтобы получить координаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...