Le compilateur réclame une erreur indiquant: "l'élément initializer n'est pas constant", lorsque j'essaie d'initialiser une variable statique dans une méthode avec un appel à une méthode statique (avec + dans sa définition). En tout cas je peux lui dire que cette méthode retourne toujours la même valeur. Je sais que ce n'est pas la même chose que la méthode statique, mais il semble qu'il n'y ait pas de méthodes constantes dans Objective-C (autres que les macros qui ne fonctionneront pas ici car j'appelle UI_USER_INTERFACE_IDIOM() depuis la méthode).Objectif C: initialisation d'une variable statique avec appel de méthode statique
Répondre
Vous ne pouvez pas faire cela en Objective-C.
Il y a deux solutions:
- Passer à Objective-C++. Modifier l'extension de fichier de
.m
à.mm
. lsinitialisez avec
nil
, et vérifiez quand vous l'utilisez, comme dans:static NSString*foo=nil; if(!foo){ foo=[ ... ] ; }
Il y a en fait une autre solution, en plus de Yuji. Vous pouvez créer une fonction et la préfixer avec un attribut GCC (fonctionne également dans Clang et LLVM) qui l'entraînera avant d'être main()
. Je l'ai utilisé cette approche à plusieurs reprises, et il ressemble à quelque chose comme ceci:
static NSString *foo;
__attribute__((constructor)) initializeFoo() {
foo = ...;
}
Lorsque vous utilisez réellement foo
, il sera déjà initialisé. Cela signifie que vous n'avez pas besoin de vérifier si c'est nil
à chaque fois. (Il s'agit certainement d'un avantage minime en termes de performances, multiplié par le nombre de fois que vous l'utilisez, mais il peut également simplifier une ou plusieurs autres régions de code.Par exemple, si vous référencez la variable statique dans N différents endroits, vous pourriez avoir pour vérifier nil
dans tous les N ou risquer un plantage Souvent, les gens appellent une fonction ou utilisent un #define
pour gérer l'initialisation, et si ce code n'est utilisé qu'une seule fois, cela peut être une pénalité valant la peine d'être supprimée
- 1. initialisation de variable statique java
- 2. initialisation statique en C
- 3. Initialisation de variable locale statique et d'objet local statique
- 4. variable ne statique "cette" méthode statique dans
- 5. Initialisation statique d'un haricot
- 6. problème variable C statique
- 7. C++ variable statique
- 8. Objet Javascript - 'Initialisation statique'
- 9. C# méthode statique question
- 10. Appel dynamique d'une variable statique (tableau)
- 11. Appel de méthode statique dynamique en PHP?
- 12. Variable de membre statique et méthode
- 13. C# Variable statique apprécient oublie
- 14. C++ modèle initialisation pointeur à membre statique
- 15. problème avec variable statique
- 16. Comment intercepter un appel de méthode statique en C#
- 17. XamlParseException initialisation d'une classe statique
- 18. Variable globale dans une méthode statique
- 19. Références de propriété statique Méthode non statique
- 20. (initialisation statique/instanciation de modèle) problèmes avec motif d'usine
- 21. Méthode statique du servlet
- 22. Accès valeur variable statique
- 23. C++ MI modèle statique - méthode statique disapears à rejoindre
- 24. Appel d'une méthode non statique à partir d'une méthode statique en Python
- 25. Variable statique/membre
- 26. Méthode d'usine statique avec génériques
- 27. lecture variable statique d'un
- 28. Collecteur d'ordures statique C#?
- 29. Méthode statique usine statique [getInstance()] dans Java?
- 30. Une variable statique essayant d'accéder à une autre variable statique
L'affectation nulle n'est pas strictement nécessaire, contrairement aux variables locales les variables statiques sont nulles par défaut. – hooleyhoop