Frage

Warum Konstanten in allen Beispielen habe ich immer mit k beginnen gesehen haben? Und sollte ich #define Konstanten in Kopf- oder .m-Datei?

Ich bin neu in Objective C, und ich weiß nicht, C. Gibt es ein Tutorial irgendwo, dass diese Art von Dingen, ohne die Annahme Kenntnisse von C erklärt?

War es hilfreich?

Lösung

Starten Konstanten mit einem „k“ ist ein Vermächtnis der Pre-Mac OS X Tage. In der Tat, ich denke, die Praxis selbst von Weg kommen könnte zurück in den Tag, wenn der Mac OS meist in Pascal geschrieben wurde, und die vorherrschende Entwicklungssprache war Pascal. In C werden #define'd Konstanten normalerweise in GROSSBUCHSTABEN geschrieben, anstatt mit einem "k" voranstellen.

Was wo Konstanten #define: sie #define, wo Sie sie verwenden werden. Wenn man die Leute erwarten, die Ihren Code #import die Konstanten zu verwenden, so dass sie in der Header-Datei setzen; wenn die Konstanten nur gehen, um intern verwendet werden, so dass sie in der .m Datei setzen.

Andere Tipps

Aktuelle Empfehlungen von Apple Namensgebung Konstanten den ‚k‘ Präfix nicht enthalten, aber viele Organisationen angenommen, dass Konvention und es immer noch verwenden, so dass Sie es immer noch sehr viel sehen.

Die Frage, was die „k“ bedeutet beantwortet in dieser Frage .

Und wenn Sie für andere Dateien als dieser bestimmte .m beabsichtigen, diese Konstanten zu verwenden, müssen Sie die Konstanten in der Kopfzeile setzen, da sie nicht die .m Datei importieren können.

Sie können in Cocoa Dev Central interessiert sein C-Tutorial für Cocoa-Programmierer . Es erklärt viele der Kernkonzepte.

k für "konvention". Ernsthaft; es ist nur Konvention.

Sie können eine #define setzen, wo immer Sie mögen; in einem Header, in der .m an der Spitze, in den .m direkt neben wo Sie es verwenden. Setzen Sie ihn einfach vor jedem Code, der es verwendet.

Die „Einführung in Objective-c“ Dokumentation mit der Xcode-Tool-Suite zur Verfügung gestellt ist eigentlich recht gut. Lesen Sie es ein paar Mal (Ich mag neu lesen es einmal alle 2 bis 5 Jahre).

Doch weder er selbst noch der C-Bücher, die mir bewusst bin, der diese speziellen Fragen beantworten wird. Die Antworten Art offensichtlich werden durch Erfahrung.

Der k Präfix stammt aus einer Zeit, wo viele Entwickler ungarische Notation zu verwenden, geliebt in ihrem Code. In der ungarischen Notation hat jede Variable ein Präfix, der Ihnen sagt, welche Art es ist. pSize wäre ein Zeiger Namen „size“ während iSize würde eine ganze Zahl „Größe“ genannt werden. Nur bei dem Namen suchen, kennen Sie den Typ einer Variablen. Dies kann sehr hilfreich in Abwesenheit von modernen IDEs sein, dass Sie den Typ einer Variablen jederzeit nachweisen können, sonst würde man immer die Erklärung, es zu wissen suchen müssen. Nach dem Trend der Zeit, wollte Apple einen gemeinsamen Präfix für alle Konstanten haben.

Okay, warum nicht c dann, wie c für "Konstante"? Da c wurde bereits genommen, in der ungarischen Notation ist c für „counter“ (cApple bedeutet „Anzahl der Äpfel“). Es gibt ein ähnliches Problem mit dem class, ein Schlüsselwort in vielen Sprachen zu sein, so wie nennen Sie eine Variable, die zu einer Klasse verweist? Sie werden Tonnen von Code finden diese Variable klass Benennung und damit k gewählt wurde, k wie in „Konstant“. In vielen Sprachen tatsächlich bedeutet dieses Wort mit ak beginnen, sieht hier .

In Bezug auf Ihre zweite Frage: Sie sollten nicht #define für den ständigen Einsatz überhaupt, wenn Sie es vermeiden können, wie #define typenlos ist

.
const int x = 10;           // Type is int
const short y = 20;         // Type is short
const uint64_t z = 30;      // Type is for sure UInt64
const double d = 5000;      // Type is for sure double
const char * str = "Hello"; // Type is for sure char *

#define FOO 90

Welche Art ist FOO? Es ist eine Art von Zahl. Aber welche Art von Nummer? Bisher jede Art oder überhaupt keine Art. Typ wird davon abhängen, wie und wo Sie FOO in Ihrem Code verwenden.

Auch wenn Sie einen festen Satz von Zahlen haben, eine enum verwenden, wie dann die Compiler überprüfen können Sie einen gültigen Wert verwenden und Enum-Werte sind immer konstant.

Wenn Sie verwenden müssen ein definieren, wird es keine Rolle, wo Sie es definieren. Header-Dateien sind Dateien, die Sie zwischen mehreren Code-Dateien gemeinsam nutzen, wenn Sie also die gleiche in mehr als einem Ort definieren müssen, schreiben Sie sie in eine Header-Datei und schließen, dass die Header-Datei überall dort, wo die definieren, benötigt wird. Was Sie in eine Code-Datei schreiben ist nur sichtbar innerhalb dieser Code-Datei, mit Ausnahme von nicht-statischen Funktionen und Obj-C-Klassen, die standardmäßig sowohl global sichtbar sind. Aber es sei denn, eine Funktion in einer Header-Datei deklariert wird, und dass die Header-Datei in eine Code-Datei enthalten, wo Sie diese Funktion verwenden möchten, wird nicht der Compiler wissen, wie diese Funktion aussieht (welche Parameter es erwartet, welches Ergebnis Wert, den es zurückgibt) , so dass es nicht von diesem prüfen kann und muss verlassen, dass Sie es richtig nennen (in der Regel wird dies dazu führen, dass eine Warnung zu erzeugen). Obj-C-Klassen können nicht verwendet werden, es sei denn, Sie die aktuelle Code-Datei zumindest sagen, dass dieser Name der Name einer Klasse ist, aber wenn Sie wollen tatsächlich etwas tun, mit dieser Klasse (andere als vorbei es gleich um), das Compiler muss die Schnittstelle der Klasse wissen, das ist, warum Schnittstellen geht in der Header-Dateien (wenn die Klasse nur innerhalb der aktuellen Code-Datei verwendet wird, das Schreiben Schnittstelle und Implementierung in die Datei ist legal und wird auch funktionieren).

Ich glaube, es ist wegen der früheren Prävalenz der ungarischen Notation ist, so wurde k gewählt, weil c für Charakter stand. ( http://en.wikipedia.org/wiki/Hungarian_notation )

- Alan

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top