2009-02-06 6 views
2

Dans la documentation d'Apple pour leur exemple d'un Singleton, et je comprends qu'il y a plus d'une façon de dépecer un chat - mais pourquoi s'inquiéter de s'assurer que l'instance est enregistrée comme statique?Objective-C Singleton instance en tant que statique?

extrais: http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/chapter_3_section_10.html

Je me réfère à:

MyGizmoClass statiques * sharedGizmoManager = nul;

+0

Le lien ci-dessus doit être mis à jour à: http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html –

Répondre

9

Je crois qu'il est impossible d'accéder à la variable depuis l'extérieur du fichier pour lequel elle est définie. Sinon, il serait globalement accessible.

Ceci impose qu'un client doit utiliser - (id) sharedObject pour accéder au singleton.

+0

J'utilise un singleton d'une manière similaire sur plusieurs fichiers/modules .. cela ne me pose aucun problème pour y accéder. – Coocoo4Cocoa

+0

L'avez-vous déclaré dans le fichier .h ou .m? Dans le .m (où il est supposé être) cela ne devrait pas être le cas. –

2

La réponse ci-dessus est correcte. Déclarer statique de la variable de singleton signifie qu'elle n'existe que dans la portée locale du fichier qui la contient, ce qui est exactement ce que vous voulez. Cela est dû en partie au fait que ce modèle singleton repose sur un chargement paresseux pour créer le singleton lors de sa première utilisation, notamment parce que vous ne voulez pas d'accès externe au pointeur qui pourrait perdre le singleton en mémoire ou permettre à une autre instance de être créé, rendant ainsi le tout inutile en premier lieu.