8
votes

Comment implémenter correctement l'ARC Compatible et `Alloc Init` Safe Singleton Classe?

J'ai vu la version sécurisée sur le fil xxx

mais que se passerait-il si quelqu'un appelle simplement [myClass Alloc] init] ? Comment le rendre le même instance que le singleton + (myClass *) méthode?


0 commentaires

3 Réponses :


0
votes

J'ai ramassé cet échantillon de code à partir du blog de Duckrawing: http://www.duckrowing.com/2011/11/09/USTION-Le-Singleton-Pattern-in-Objective-c-Part-2/

Dans le .h, nous avons xxx

et dans la .m, nous avons xxx

remarque l'allocwithzone.


4 commentaires

Tout d'abord, le comportement que vous essayez de mettre en œuvre est que [[Alloc] init] doit renvoyer exactement le même objet que Sharedfoo. Il y a des cas comme Nsfilemanager où il y a un singleton partagé, mais [[[Alloc] init] renvoie un exemple différent. Dans votre cas, je pense que vous pourriez simplement mettre un Dispatch_Onece à init au lieu de Dispatch_Sync et oubliez l'allocwithzone.


Comment pouvez-vous avoir un singleton avec plus d'une instance unique?


Nsfilemanager fournit un singleton qui peut faire la plupart des choses que vous voulez faire. Il fournit également des instances individuelles que vous pouvez modifier pour des situations plus complexes. Sharedinstance est donc un singleton, mais [[Alloc] init] n'est pas.


Je comprends que, ce n'est tout simplement pas un singleton comme je les connais. Oui, vous avez un accès facile à une instance partagée, mais le modèle de conception singleton (ou anti-motif!) Signifie une seule instance.




2
votes

Cela pourrait être utile, xxx


0 commentaires