Ich habe eine constants.h-Datei, die eine Reihe von Zeichenfolgen deklariert, die ich in meiner App verwende. Ich habe nur Saiten und sonst nichts. Soll ich #define oder statisch NSString const verwenden? #define funktioniert, aber ich höre seine nicht beste Praxis.iOS #define oder statische const für globale Zeichenfolgen
12
A
Antwort
32
Die #define
ist ein Pre-Prozessor-Makro. Das bedeutet, dass es im Grunde Ihren Code durchläuft und Ihr Makro durch das, was Sie definiert haben, ersetzt.
Wenn Sie ein const verwenden, wird es ein Zeiger auf die Zeichenfolge im Speicher sein. Es ist viel effizienter, als wenn die gleiche Zeichenfolge zugewiesen wird, egal wo und wann sie verwendet wird.
Um dies zu tun, benötigen Sie beide .h und .m-Dateien. Ihre .h-Datei so etwas wie aussehen:
extern NSString * const YOUR_STRING;
Und .m-Datei:
NSString * const YOUR_STRING = @"your string";
Verwandte Themen
- 1. Wann werden globale statische const-Variablen initialisiert?
- 2. C++ Statische Const Member Variablenverwendung
- 3. Browserify define globale Module in require
- 4. #define MY_INT VS const int MY_INT
- 5. Wenn statische Zeichenfolge vs. #define verwenden
- 6. Globale const Char Zeiger-Array in C++
- 7. C++ statische globale Objekte Workarounds?
- 8. #define oder enum?
- 9. War eine statische Variable eine globale Variable?
- 10. C++ Initialisiere statische const Strukturvariable
- 11. Array-Format für #define (C-Präprozessor)
- 12. Const-Methode Zugriff auf statische Variablen
- 13. Globale Objekte oder nicht?
- 14. Problem mit const vs #define in Visual Studio
- 15. Define Charset für htmlentities()
- 16. Wo setze ich konstante Zeichenfolgen in C++: statische Klassenmitglieder oder anonyme Namespaces?
- 17. #define oder #if statement error
- 18. c Sprache - kann ich const uint32_t anstelle von #define verwenden
- 19. Globale vs statische Variablen in PHP
- 20. Statische Assert, um statische Const-Klasse Datenelemente zu überprüfen?
- 21. public static class oder const
- 22. Ruft C++ Destruktoren für globale und statische Klassenvariablen auf?
- 23. Ziel C - Statische und globale Variable?
- 24. Falsche statische const Initialisierung, kompiliert und funktioniert
- 25. C++ statische globale nicht-POD: Theorie und Praxis
- 26. const volatile, registrieren flüchtigen, statische volatile in C++
- 27. C: „static const char * const“ auf „static const char *“
- 28. nicht-statische globale Variable in Java
- 29. sollte ExecutorService statische und globale sein
- 30. Globale statische Ressourcen in einer WPF-Klassenbibliothek?
In einfachen Anwendungsfällen wird der Compiler mehrere Kreationen von derselben Saite optimieren und eine const sowieso erstellen. Bei anderen, nicht trivialen Klassen ist es jedoch besser, einen konstanten Wert zu haben, der einmal initialisiert wird, wenn die Klasse zum Beispiel geladen wird. Conests sind auch gut, wenn Sie ein öffentliches Symbol in einer öffentlichen API anzeigen möchten. –
sie werden beide als eine konstante Zeichenfolge in der ausführbaren Datei und im Speicher gespeichert werden ... –
Was ist, wenn es ein Format wie @ "das ist meine Zeichenfolge mit int% i"? – user1802143