Namenskonvention für Open-Source-Projekte unter iOS / OSX

12

Nicht immer, aber meistens finden Sie Open-Source-Projekte für iOS oder Mac OS X, deren Namen mit den Anfangsbuchstaben des Vor- und Nachnamens des Autors beginnen. Wenn ein Projekt von Nick Leblanc verfasst würde, würde das Projekt als gelesen werden NLMyProject.

Beispiele:

Woher kommt das? Hat es eine Person zuerst so geschrieben und dann sind alle anderen gefolgt?

Ich konnte selbst in den Apple-Richtlinien nichts dazu finden . Ist diese Redewendung irgendwo geschrieben?

Stéphane Bruckert
quelle
1
Gute Frage und coole Open Source Beispiele! ;-)
Leo Natan

Antworten:

16

Ziel C hat wie C keine Namespaces. Dies bedeutet , dass , wenn jemand bereits eine Funktion definiert foooder eine Klasse Bar, muss es global eindeutig sein und man kann es nicht definieren. Dies kann zu vielen Kopfschmerzen führen, wenn Sie Ihren Code haben und dann eine weitere Bibliothek hinzufügen, und plötzlich brechen die Dinge an seltsamen Orten.

Es ist ein Leitfaden für den von Apple präsentierte in Programmierung mit Objective C: Konventionen Abschnitt der iOS Entwickler - Bibliothek:

Einige Namen müssen in Ihrer App eindeutig sein

Bei jedem Erstellen eines neuen Typs, Symbols oder Bezeichners sollten Sie zuerst den Bereich berücksichtigen, in dem der Name eindeutig sein muss. Manchmal kann dieser Bereich die gesamte Anwendung sein, einschließlich der verknüpften Frameworks. manchmal beschränkt sich der Geltungsbereich nur auf eine einschließende Klasse oder sogar nur auf einen Codeblock.

Klassennamen müssen in einer gesamten App eindeutig sein

Objective-C-Klassen müssen nicht nur innerhalb des Codes, den Sie in einem Projekt schreiben, eindeutig benannt werden, sondern auch innerhalb aller Frameworks oder Bundles, die Sie möglicherweise einschließen. Beispielsweise sollten Sie generische Klassennamen wie ViewController oder TextParser vermeiden, da ein Framework, das Sie in Ihre App aufnehmen, möglicherweise nicht den Konventionen entspricht und Klassen mit denselben Namen erstellt.

Um die Klassennamen eindeutig zu halten, werden Präfixe für alle Klassen verwendet. Sie haben bemerkt, dass Cocoa- und Cocoa Touch-Klassennamen normalerweise entweder mit NS oder UI beginnen. Solche Zwei-Buchstaben-Präfixe sind von Apple für die Verwendung in Framework-Klassen reserviert. Wenn Sie mehr über Cocoa und Cocoa Touch erfahren, werden Sie auf eine Vielzahl anderer Präfixe stoßen, die sich auf bestimmte Frameworks beziehen:

...

Ihre eigenen Klassen sollten drei Buchstabenpräfixe verwenden. Diese können sich auf eine Kombination aus Ihrem Firmennamen und Ihrem App-Namen oder sogar auf eine bestimmte Komponente in Ihrer App beziehen. Wenn Ihre Firma beispielsweise Whispering Oak heißt und Sie ein Spiel namens Zebra Surprise entwickeln, können Sie WZS oder WOZ als Klassenpräfix auswählen.

Diese Bibliotheken, von denen Sie erwähnen, dass sie diese Konvention brechen, befassen sich jedoch mit dem Problem des fehlenden Namensraums in Objective C.

Weiterführende
Literatur Namespacing von NSHipster
Was ist der beste Weg, um eine Objective-C-Namespace-Kollision zu lösen?
Wie verwendet man Namespaces in iOS Objective-C-Code?

Gemeinschaft
quelle
Klingt so, als ob Objective-C wirklich Namespaces braucht ...
Chris Cirefice
1
@ChrisCirefice es wäre wirklich schön, aber die Sache zu erkennen ist, dass Objective C eine dünne Schicht auf C ist. Der Versuch, dort Namensräume einzuführen, ist wahrscheinlich schwieriger als es aussieht, ohne Dinge zu zerbrechen. Einarbeiten Warum hat Objective-C keine Namespaces? Ich habe Clang-Entwickler gefunden - Hinzufügen von Namespaces zu Objective-C . Denken Sie daran, @wird verwendet, weil es in C nicht verwendet wird. Der Versuch, einen anderen Operator hinzuzufügen, der andere Dinge nicht unterbricht, ist eine Herausforderung.
1
@ChrisCirefice Namespaces lösen nichts. Präfix-Konflikte werden zu Namespace-Konflikten.
Miles Rout
@MichaelT Objective C ist seit einiger Zeit keine dünne Schicht mehr auf C (Objective C 2.0). Jetzt hat Apple den Fokus auf Swift verlagert, das modernere Features wie Namespaces enthält, aber derzeit keine weiteren Features von Objective C.
Leo Natan