J'ai vu la version sécurisée sur le fil mais que se passerait-il si quelqu'un appelle simplement [myClass Alloc] init] code>? Comment le rendre le même instance que le singleton
+ (myClass *) code> méthode? P> p>
3 Réponses :
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 p> et dans la .m, nous avons p> remarque l'allocwithzone. p> p>
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 i> 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.
Apple recommande la mise en œuvre stricte singleton (aucun autre objet de vie du même type n'est autorisé) de cette façon: lien vers la pomme Documentation (bas de la page, sans arc) a> p> p>
Vous faites déjà un Dispatch_Oronce (), est-il nécessaire de faire si (! singletoninstance)? Je crois que le Dispatch_Onece () va gérer cela pour nous au-dessus d'autres choses comme la synchronisation.
@pnizzle Vous avez raison, DisPatch_Oronce serait suffisant, vérifiant l'instance avant de pouvoir être plus rapide.
Est allocwithzone: code> obsolète? On dirait que lorsque j'essaie de le mettre en œuvre.
Cela pourrait être utile,