Cree un singleton usando despacho_once de GCD en Objective-C

Resuelto Ryan asked hace 54 años • 10 respuestas

Si puede apuntar a iOS 4.0 o superior

Usar GCD, ¿es la mejor manera de crear singleton en Objective-C (seguro para subprocesos)?

+ (instancetype)sharedInstance
{
    static dispatch_once_t once;
    static id sharedInstance;
    dispatch_once(&once, ^{
        sharedInstance = [[self alloc] init];
    });
    return sharedInstance;
}
Ryan avatar Jan 01 '70 08:01 Ryan
Aceptado

Esta es una forma perfectamente aceptable y segura para subprocesos de crear una instancia de su clase. Puede que técnicamente no sea un "singleton" (en el sentido de que solo puede haber 1 de estos objetos), pero siempre y cuando solo uses el [Foo sharedFoo]método para acceder al objeto, esto es suficiente.

Dave DeLong avatar Apr 19 '2011 17:04 Dave DeLong

tipo de instancia

instancetypees solo una de las muchas extensiones de idioma de Objective-C, y se agregan más con cada nueva versión.

Conócelo, ámalo.

Y tómelo como un ejemplo de cómo prestar atención a los detalles de bajo nivel puede brindarle información sobre nuevas y poderosas formas de transformar Objective-C.

Consulte aquí: tipo de instancia


+ (instancetype)sharedInstance
{
    static dispatch_once_t once;
    static id sharedInstance;

    dispatch_once(&once, ^
    {
        sharedInstance = [self new];
    });    
    return sharedInstance;
}

+ (Class*)sharedInstance
{
    static dispatch_once_t once;
    static Class *sharedInstance;

    dispatch_once(&once, ^
    {
        sharedInstance = [self new];
    });    
    return sharedInstance;
}
Zelko avatar Nov 13 '2013 06:11 Zelko