2010-12-07 14 views
1

Ich bin ein .NET Entwickler, der auf das iPhone kommt, ich fühle mich immer noch im Moment herum.Wie unterscheidet sich das const-Schlüsselwort zwischen iPhone und .NET?

Ich habe einen Punkt getroffen, in dem ich normalerweise eine benannte Konstante für die Lesbarkeit verwenden würde. Ich verstehe, dass es auch ein const-Schlüsselwort in iPhone dev gibt, aber die meisten Beispiele, die ich gesehen habe, verwenden ein #define in diesem Fall.

Was sind die wirklichen Unterschiede zwischen den beiden Implementierungen? Bonusfrage: Wie und wann sollten/sollten sie nicht verwendet werden?

+0

Verwenden Sie const, wann immer Sie können, #define nur wenn Sie müssen. –

Antwort

2

Es gibt eine Reihe anderer Fragen auf, so dass darüber diskutieren, wie Konstanten deklariert sind und verhalten sich in Objective-C, sollten Sie unter der folgenden aussehen:

Constants in Objective-C

Objective-C “const” question

Significance of const keyword positioning in variable declarations

Um zu vergleichen und gegen C#, würde ich darauf hinweisen, dass const in Obj-C ist im Wesentlichen das gleiche wie in der Sprache C (Obj-C ist ein supe rset von C in der Tat). In Obj-C werden Konstanten im globalen Gültigkeitsbereich deklariert und müssen mit einem Wert initialisiert werden, der zur Kompilierungszeit bekannt ist. Objective-C unterstützt keine Konstanten als Klassenmitglieder. In C# sind Konstanten immer Mitglieder einer Klasse (oder Struktur) und müssen ebenfalls mit einem Wert initialisiert werden, der zur Kompilierzeit bekannt ist. C# #define lässt nicht zu, dass ein Wert einem definierten Symbol zugeordnet wird, sondern ermöglicht die Auswahl von bedingten Kompilierungspfaden (unter Verwendung von #if und #else), was ziemlich unterschiedlich ist.

Im Hinblick auf die Verwendung von #define, um Konstanten zu deklarieren, versuche ich persönlich, dies zu vermeiden, wenn möglich. Werte, die #defined sind, werden zur Kompilierungszeit einfach in den Code eingefügt - und könnten in verschiedenen Kontexten unterschiedlich interpretiert werden. Es ist auch möglich, Namenskollisionen einzuführen, die zu unerwarteten Neudefinitionen eines Werts führen können. Meine Vorschläge sind, const zu verwenden, wenn Sie können und #define nur wenn Sie müssen.

1

#defines sind Präprozessor-Makros, die im endgültigen Code ersetzt werden. Als solche haben sie einen einmal definierten Wert und können kostenlos abgerufen werden. const hingegen reserviert nur statisch eine Variable, die der Compiler behandelt. Als solcher würde ich (oder eher bin ich) #define statt const für die meisten Aufgaben verwenden.
Nur #defined'd Konstanten können für Switch Statements, BTW verwendet werden.

+0

Nützliche Infos, danke :) –

Verwandte Themen