Что такое паттерн Singleton в iOS?

«Что такое паттерн Singleton в iOS?» — вопрос из категории Реактивное программирование, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Основная цель: централизованное управление общим ресурсом или сервисом (например, сетевым менеджером, менеджером данных или настройками).

Пример реализации в Swift:

class NetworkManager {
    // Единственный общий экземпляр
    static let shared = NetworkManager()

    // Приватный инициализатор предотвращает создание новых экземпляров извне
    private init() {}

    func fetchData(completion: @escaping (Result<Data, Error>) -> Void) {
        // Сетевая логика...
    }
}

// Использование:
NetworkManager.shared.fetchData { result in
    // Обработка результата
}

Ключевые особенности и best practices:

  • Потокобезопасность: В Swift инициализация static let является атомарной и потокобезопасной по умолчанию.
  • Тестируемость: Singleton усложняет модульное тестирование из-за глобального состояния. Рекомендуется использовать протоколы и dependency injection для замены синглтона на мок в тестах.
  • Применение: Используйте осознанно, только когда действительно необходим строго один экземпляр на всё приложение. Часто предпочтительнее передавать зависимости явно.