Sobes.tech
Назад к вопросам
Junior — Middle
77

Какими методами можно реализовать паттерн Singleton в программировании?

Компании, где спрашивали
4 лапы4 лапы

Ответ от нейросети

sobes.tech AI

Паттерн Singleton гарантирует, что у класса есть только один экземпляр, и предоставляет глобальную точку доступа к нему. В iOS (Swift/Objective-C) есть несколько способов реализации Singleton:

  1. Использование статической константы (Swift)
class MySingleton {
    static let shared = MySingleton()
    private init() { }
}

Этот способ ленивый и потокобезопасный, так как static let инициализируется один раз.

  1. Использование dispatch_once (Objective-C)
+ (instancetype)sharedInstance {
    static MySingleton *sharedInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[self alloc] init];
    });
    return sharedInstance;
}
  1. Ленивая инициализация с проверкой (не рекомендуется из-за проблем с потокобезопасностью)
class MySingleton {
    static var shared: MySingleton = {
        return MySingleton()
    }()
    private init() { }
}
  1. Использование enum (Swift)
enum MySingleton {
    static let shared = MySingleton()
}

Но чаще всего используется первый способ с static let.

Важно: конструктор должен быть приватным, чтобы предотвратить создание других экземпляров.