Inizializzazione delle proprietà singleton, in init o in sharedMyClass?

0

Quindi ho un singleton in Objective-C, c'è un metodo statico esposto per accedere all'unica istanza:

+ (id)sharedMyClass {
    static MyClass* sharedMyClass = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedMyClass = [[self alloc] init];
        sharedMyClass.myStringProperty = @"bla"; // here
    });
    return sharedMyClass;
}

e un metodo% non esposto diinit, utilizzato solo quando l'istanza viene creata per la prima volta:

- (id)init {
    if (self = [super init]) {
        self.myStringProperty = @"bla"; // or here
        return self;
    }
    return nil;
}

Posso inizializzare le proprietà dell'istanza nel primo metodo, impostandole direttamente su sharedMyClass all'interno del blocco dispatch_once . Oppure posso impostarli su self nel metodo init . So che funzionalmente non c'è alcuna differenza, ma c'è una convenzione per questo? Qual è la migliore pratica?

    
posta Kevin 05.04.2017 - 20:19
fonte

2 risposte

4

Impostarli in -init è meglio. Un giorno potresti voler rendere questo non singleton (ad esempio, con scope alla sessione utente) o un singleton "ibrido" ( NSUserDefaults ha un membro "simile a un singleton" ma puoi anche creare istanze arbitrarie). Se l'installazione è stata eseguita in -init , non dovrai modificarne il numero.

    
risposta data 13.09.2017 - 15:44
fonte
0

Li inizializzo sempre nel + metodo condiviso. E poi diventa sempre di più e aggiungo un metodo -init e calcia me stesso perché avrei dovuto farlo in primo luogo. O farlo come me, o meglio iniziare con il metodo init in primo luogo.

    
risposta data 13.09.2017 - 20:49
fonte

Leggi altre domande sui tag