Cree un singleton usando despacho_once de GCD en Objective-C
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;
}
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.
tipo de instancia
instancetype
es 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;
}