0

Je la mise en œuvre du manuel-singleton en Objective-C:Singleton GCD-style jette une erreur de compilation ... parfois?

+ (instancetype) sharedSingleton 
{ 
    id sharedInstance = nil; 
    static dispatch_once_t onceToken; 

    dispatch_once(&onceToken, ^{    
     sharedInstance = [[self alloc] init]; 
    }); 

    return sharedInstance; 
} 

... comme je l'ai fait pendant un certain temps. Lors de la modification d'un ancien @synchronized -syntax singleton à ce genre, dans un ancien projet (ouvert dans la dernière version de Xcode), je reçois l'erreur:

Variable is not assignable (missing __block type specifier) 

... montrant la ligne d'allocation. J'ai exactement le même code dans de nombreuses parties d'un autre code, construit et exécuté avec le même environnement, et jamais un problème ... Que se passe-t-il? Dois-je préfixer le qualificatif __block et en avoir terminé avec lui, ou y a-t-il plus que ce qui me vient à l'esprit ici?

La seule chose que je peux penser est, ce vieux projet, je suis a la modernisation en ce moment PAS été passés à ARC ... (encore)

+7

Missing 'static'? Comme dans: 'static id sharedInstance = nil;' –

+0

Et, je remplacer 'instancetype' avec le type d'instance réelle ou avec' id'. – Desdenova

+1

@ DavidRönnqvist vous avez absolument raison, je viens de réaliser qu'il me manquait le 'static' ... J'ai besoin de sommeil! Sans elle, la variable devient automatique et donc désallouée dès que la méthode revient. C'est pourquoi j'ai besoin de le faire __block! Faites votre commentaire une réponse et je l'accepterai. –

Répondre

Questions connexes