Willkommen zu meiner Serie über die Auseinandersetzung mit der großartigen Sprache Objective-C. In dieser kleinen Artikelserie möchte ich Sie dazu bringen, keine Erfahrungen mit Objective-C zu sammeln, um sie in Ihren eigenen Anwendungen sicher einzusetzen. Dies ist kein Eile-Job. Erwarten Sie also nicht einfach nur die Grundlagen und gehen Sie weg. Wir werden nicht nur das Nötigste durchmachen, sondern auch die bewährten Methoden, die Sie anwenden können, um sicherzustellen, dass Ihr Code der beste ist es kann sein. Lass uns direkt rein springen!
Wenn Sie diese Serie lesen, riskiere ich eine Vermutung, die Sie bereits kennen, aber für diejenigen von Ihnen, die dies nicht tun, machen Sie sich keine Sorgen, denn am Ende dieses Teils wissen Sie, worauf es ankommt von vorne und von innen nach außen.
Objective-C ist eine objektorientierte Sprache, die über der C-Sprache liegt (aber ich wette, Sie haben diesen Teil erraten!). Im modernen Computing findet es hauptsächlich Verwendung unter Mac OS X als Desktopsprache und auch unter iPhone OS (oder wie es jetzt heißt: iOS). Es war ursprünglich die Hauptsprache für NeXTSTEP OS, auch bekannt als das Betriebssystem, das Apple von Mac OS X kaufte und abstammte. Dies erklärt, warum sein ursprüngliches Zuhause heute auf Apples Betriebssystemen liegt.
Da Objective-C eine strenge Obermenge von C ist, können wir C in einer Objective-C-Datei frei verwenden. Da jeder Compiler von Objective-C auch jeden reinen C-Code kompilieren kann, haben wir alle Möglichkeiten von C zusammen mit den von Objective-C bereitgestellten Objekten.
Wenn Sie an diesem Punkt etwas verwirrt sind, stellen Sie sich Folgendes so vor: Alles, was C kann, Objective-C kann auch, aber nicht umgekehrt.
In dieser Serie werden wir uns nicht auf die Entwicklung von Anwendungen für das iPhone konzentrieren. Stattdessen konzentrieren wir uns mehr auf die Sprache selbst. Aus diesem Grund benötigen Sie nur einen Mac mit einem Compiler wie GCC. Wenn Sie die Entwicklertools von Apple installiert haben (Xcode, Interface Builder usw.), sollte GCC bereits installiert sein. Wenn nicht, dann besuchen Sie die Entwickler-Website von Apple und erhalten Sie ein kostenloses Exemplar.
Was die Voraussetzungen angeht, obwohl ich nicht damit rechne, dass Sie über einen umfassenden Informatikhintergrund verfügen, wäre ein gewisses Wissen über Programmieren im Allgemeinen oder C im Besonderen definitiv ein Bonus. Wenn Sie nicht viel Erfahrung mit dem Programmieren haben, machen Sie sich keine Sorgen - Sie werden es in kürzester Zeit abholen!
Wenn Sie Windows ausführen (was unwahrscheinlich ist, da dieses Lernprogramm für iPhone-Entwickler gedacht ist), können Sie Objective-C auf Ihrem System mit einem Compiler wie CygWin oder MinGW kompilieren. Diese Tutorialserie richtet sich an Mac-Benutzer. Wenn Sie jedoch Windows verwenden und auf Probleme stoßen, sollten Sie unbedingt einen Kommentar hinterlassen, und ich werde sehen, ob ich Ihnen helfen kann.
Bevor Sie Ihren Code in Aktion sehen können, müssen Sie ihn in eine ausführbare Datei kompilieren können. Hoffentlich haben Sie jetzt Ihre Kopie von GCC bereit. Das Kompilieren ist sehr einfach, ein einfacher einzeiliger Befehl.
HINWEIS:
Beim Kompilieren wird eine übergeordnete Computersprache wie Objective-C oder PHP in einen einfachen Maschinencode "übersetzt", der von einem Computer verarbeitet werden kann, wenn das Programm ausgeführt wird.
Alle Programme, die in unserem schicken Mac OS-Betriebssystem ausgeführt werden, bestehen aus einer Reihe von Anweisungen, die uns visuell in einer grafischen Benutzeroberfläche oder einer grafischen Benutzeroberfläche angezeigt werden. Im Gegensatz zur GUI-Programminteraktion mit einer Maus, mit der die meisten von uns vertraut sind, ist es möglich, über eine textbasierte Schnittstelle, die als "Terminal" oder "Befehlszeile" bezeichnet wird, Befehle direkt an das Betriebssystem auszugeben.
Die Befehlszeilenanwendung in Mac OS heißt Terminal und befindet sich in Anwendungen -> Dienstprogramme. Öffnen Sie jetzt das Terminal (Sie können es auch in Spotlight suchen). Das Terminal verfügt über mehrere grundlegende Befehle, die Sie kennen sollten, um es richtig zu nutzen. Einer der wichtigsten zu wissen Befehle ist CD, das steht für "Verzeichnis wechseln". Mit diesem Befehl können wir ändern, wo im Dateisystem das Terminal liest. Wir können das Terminal nicht einfach dazu auffordern, unsere Datei zu kompilieren, wenn wir nicht zeigen, wo sich die Datei zuerst befindet! Um zu einem gewünschten Verzeichnis zu wechseln, können Sie einen vollständigen Pfad verwenden, z.
cd / Benutzer / MyName / Desktop / Test
Sie können auch relative Pfade verwenden, sodass Sie in einigen Fällen nur einen einzelnen Ordnernamen eingeben können. Wenn Sie sich beispielsweise bereits in Ihrem Desktop-Ordner befinden, können Sie einfach Folgendes eingeben:
CD-Test
um zum Testordner zu gelangen.
Was ist, wenn Sie sehen möchten, wo Sie sich gerade befinden? Der Name des aktuellen Ordners wird vor der Aufforderung angezeigt (das Bit, in das Sie eingeben). Zum Beispiel, wenn Ihre Aufforderung sagt Dan-Walkers-MacBook: Desktop iDemonix $ Ich kann davon ausgehen, dass ich im Desktop-Ordner bin. Wenn Sie sich nicht sicher sind, können Sie auch eingeben pwd um den absoluten Dateipfad des aktuellen Standorts anzuzeigen.
Wenn Sie auflisten möchten, welche Dateien und Ordner sich im aktuellen Ordner befinden, verwenden Sie den Befehl list: ls. Wenn Sie schließlich ein Verzeichnis in einen übergeordneten Ordner verschieben möchten, geben Sie "CD… Wenn wir uns also im Testordner befanden, der sich im Desktopordner befindet, aber stattdessen in den Desktopordner wechseln wollten, könnten wir eingeben CD… um zum übergeordneten Verzeichnis zu gelangen, Desktop. Wenn wir ins Heimatverzeichnis kommen wollten, gaben wir ein cd… /… zwei Stufen steigen. Alternativ können Sie auch einfach das Basisverzeichnis eingeben cd ~ von überall.
Bei Verwendung der Terminal-Anwendung sieht das Kompilieren folgendermaßen aus:
gcc inputfile.m -o Ausgabedatei
Sie haben wahrscheinlich bereits erraten, wie es funktioniert: Eingabedatei.m enthält unseren Code (.m ist die Erweiterung für Objective-C-Dateien) und -O teilt gcc mit, dass unsere ausführbare Datei aufgerufen werden soll, was wir als Nächstes angeben, was im obigen Beispiel der Fall ist Ausgabedatei. Um unsere Erstellung nach dem Kompilieren auszuführen, geben Sie einfach Folgendes ein:
./ Ausgabedatei
Einfach.
Beim Kompilieren generiert der Compiler alle Fehler, Benachrichtigungen oder Warnungen, die sich auf die Syntax Ihres Codes beziehen. Fehler, die beim Kompilieren erzeugt werden, werden verständlicherweise als "Kompilierzeitfehler" bezeichnet. Dies ist oft der stressigste Teil beim Schreiben einer Anwendung (insbesondere wenn Ihr Code nicht kompiliert wird, weil Sie ein einzelnes Zeichen an die falsche Stelle setzen oder vergessen haben eine Zeile mit einem Semikolon beenden). Das Kompilieren kann auch Zeit in Anspruch nehmen, wenn Sie große Anwendungen schreiben, die aus mehreren Dateien bestehen. Dies ist ein weiterer Grund, warum das Kompilieren eine langwierige Erfahrung sein kann. Diese Tatsache hat zu einem allgegenwärtigen Programmierer-Witz geführt, der häufig auf T-Shirts von Männern mit ungepflegten Bärten gesehen wird: "Ich lasse nicht nach. Mein Code kompiliert."
Objective-C selbst ist nicht so schwer zu lernen. Sobald Sie sich mit den Grundprinzipien vertraut gemacht haben, können Sie den Rest abholen, während Sie ganz leicht weitergehen. Sie müssen sich jedoch mit den Grundlagen der C-Programmierung auskennen. Dies wird auch in diesem Tutorial behandelt.
Schauen wir uns eine grundlegende Anwendung in C an:
#umfassenint main () printf ("Hallo Welt \ n"); 0 zurückgeben;
Wenn Sie dieses Programm ausführen, wird die Zeichenfolge "Hello World" im Terminal angezeigt und das Programm beendet.
HINWEIS:
Neugierig auf die "return 0" -Anweisung? Da wir dem Compiler mitgeteilt haben, dass die Funktion main () eine Ganzzahl zurückgibt, geben wir den konstanten Ganzzahlwert '0' am Ende der Funktion zurück. Die Rückgabe '0' signalisiert dem aufrufenden Programm per Konvention, dass die Ausführung des Programms fehlerfrei beendet wurde.
Um dies selbst auszuprobieren, starten Sie Xcode und erstellen Sie eine neue Objective-C-Klasse. Löschen Sie den Code, den Xcode standardmäßig enthält, und kleben Sie den obigen Code ein. Wenn Sie dies getan haben, können Sie ihn mit Terminal kompilieren. Öffnen Sie das Terminal und wechseln Sie zu dem Speicherort Ihrer Datei. Wenn Sie auf dem Desktop gespeichert haben, geben Sie einfach ein CD-Desktop Damit liest Terminal jetzt von Ihrem Desktop aus. Dann geben Sie diesen Befehl ein:
gcc program1.m -o programm1
Ihr Programm sollte ohne Fehler kompilieren. Um es auszuführen, geben Sie einfach Folgendes ein:
./ program1
Drücken Sie dann die Eingabetaste.
Toll, was ist dort eigentlich passiert? Zunächst haben wir eine Bibliothek namens stdio importiert, die die standardmäßigen E / A-Funktionen (input output) wie printf () verwaltet. Wir erstellen dann eine Funktion namens main, die ein Int oder Integer zurückgeben soll, bei dem es sich im Wesentlichen um eine Zahl ohne Dezimalpunkt handelt. Dann verwenden wir die Funktion printf (), um "Hallo Welt" in Terminal auszugeben. Das \ n, das wir verwenden, teilt dem Terminal mit, dass hinter dem Text eine neue Zeile eingefügt wird. Schließlich geben wir 0 zurück (denken Sie daran, dass Main eine ganze Zahl zurückgeben sollte), die dem Betriebssystem mitteilt, dass alles gut gelaufen ist. Wir verwenden den Namen main, da dieser automatisch ausgelöst wird, wenn das Programm ausgeführt wird.
Bisher sollte alles ziemlich einfach sein: Wir wollten Text in Terminal schreiben, also haben wir eine Bibliothek mit einer Funktion zum Schreiben von Text importiert. Dann haben wir eine Funktion aus dieser Bibliothek verwendet, um den Text zu schreiben. Stellen Sie sich vor, Sie importieren eine physische Bibliothek und printf () ist eines der verfügbaren Bücher.
Soldiering voraus, wir gehen jetzt auf Variablen ein. Eine der grundlegenden Funktionen, die wir für unsere Anwendungen benötigen, ist das vorübergehende Speichern von Daten. Wir verwenden dazu Variablen, Container, die verschiedene Datentypen enthalten und auf verschiedene Weise manipuliert werden können. Wir verwenden Variablen, um alle Arten von Daten zu speichern, aber wir müssen dem Compiler zunächst mitteilen, was wir darin speichern wollen. Hier sind einige der wichtigsten Variablen, die Sie vorerst kennen sollten:
Wenn wir keine Variablen verwenden, verwenden wir häufig Konstanten. Eine Konstante wird sich nie ändern: Wir wissen immer, welchen Wert das haben wird. Wenn wir Konstanten kombinieren, erhalten wir einen konstanten Ausdruck, von dem wir immer das Ergebnis wissen. Zum Beispiel:
123 + 2 = 125
Dies ist ein konstanter Ausdruck, 123 + 2 wird immer 125 sein, egal was passiert. Wenn wir eine Variable durch eine Konstante ersetzen, würde der neue Ausdruck folgendermaßen aussehen:
123 + i = ?
Da i eine dynamische Variable ist, kennen wir das Ergebnis dieser Gleichung nicht definitiv. Wir können i zu einem beliebigen Ergebnis ändern und ein anderes Ergebnis erzielen. Dies sollte Ihnen einen Eindruck davon vermitteln, wie Variablen funktionieren.
Was wir noch wissen müssen, ist, wie wir Variablen anzeigen, wie wir sie oben mit „Hallo Welt“ angezeigt haben. Wir verwenden immer noch die Funktion printf (), außer dass sich diesmal etwas ändert:
#umfassenint main () int someNumber = 123; printf ("Meine Nummer ist% i \ n", someNumber); 0 zurückgeben;
Was wir hier gemacht haben, sagt der Funktion printf (), wo wir unsere Ganzzahl anzeigen wollen, und wo sie gefunden werden kann. Dies unterscheidet sich von vielen Sprachen wie PHP, bei denen Sie die Variable einfach in den Text einfügen können.
Wir sind nicht nur auf eine Variable in printf () beschränkt. Die Funktion kann mehrere durch Kommas getrennte Parameter akzeptieren, sodass wir so viele übergeben können, wie Formatierungszeichen im Text vorhanden sind. Oben verwenden wir% i als Formatierungszeichen, da wir eine ganze Zahl enthalten. Andere Variablen haben ihre eigenen Formatangaben:
Eine Sache, die ich ansprechen möchte, bevor wir fortfahren, ist der Char-Typ. Eine Variable vom Typ char kann nur mit einzelnen Zeichen umgehen. Wenn das alles ist, was wir brauchen, ist das großartig, aber wenn wir eine Zeichenfolge benötigen, ist das ziemlich nutzlos. Um dies zu umgehen, verwenden wir ein so genanntes Zeichenarray.
Stellen Sie sich vor, Sie haben einen Satz, der 11 Zeichen lang ist (wie "Hallo Welt" - vergessen Sie nicht, das Leerzeichen einzuschließen). Ein Zeichen-Array ist wie mit 11 Zeichen, die aber alle zusammengeklebt sind. Dies bedeutet, dass der Wert des Zeichen-Arrays insgesamt "Hallo Welt" ist, aber char [0] ist "H". In Klammern steht das Zeichen, das Sie suchen, da wir 0 setzen, erhalten wir den ersten Buchstaben. Vergessen Sie nicht, dass das Zählen in Arrays normalerweise bei 0 beginnt, nicht bei 1.
Wenn eine Anwendung eine Entscheidung treffen muss, verwenden wir eine Bedingung. Ohne Bedingungen wäre jedes Mal, wenn Sie Ihre Anwendung ausführten, genau dasselbe wie beim Ansehen eines Films. Durch Treffen von Entscheidungen basierend auf Variablen, Eingaben oder irgendetwas anderem können wir die Anwendungsänderung vornehmen - dies kann so einfach sein wie ein Benutzer, der eine Seriennummer eingibt oder mehr als zehn Mal eine Taste drückt.
Es gibt einige verschiedene Arten von Bedingungen, aber im Moment betrachten wir nur die häufigsten und grundlegendsten: die ob Aussage. Eine if-Anweisung macht, wie es sich anhört, prüft, ob etwas wahr ist, und wirkt so oder so. Zum Beispiel:
#umfassenint main () if (1 == 1) // Das ist immer wahr // Mach was hier return 0;
Wenn 1 gleich 1 ist, wird ausgeführt, was zwischen den Klammern steht. Sie fragen sich vielleicht auch, warum wir zwei Gleichheitszeichen anstelle von einem verwendet haben. Die Verwendung von zwei Gleichheitszeichen ist ein Gleichheitsoperator, der prüft, ob die beiden gleich sind. Wenn wir ein einzelnes Gleichheitszeichen verwenden, versuchen wir, den ersten Wert dem zweiten Wert zuzuweisen.
Da 1 immer das gleiche wie 1 ist, wird ausgeführt, was in den Klammern steht. Was wäre, wenn wir etwas tun wollten, wenn dies nicht der Fall war? Das ist wo sonst Kommt herein. Mit else können wir Code ausführen, wenn die if-Bedingung false zurückgibt:
int main () if (1 == 1) // Hier einige Sachen machen. else // Das Universum ist kaputt! return 0;
Im wirklichen Leben würden wir natürlich nicht prüfen, ob 1 gleich 1 ist, aber der Punkt ist gemacht. Betrachten Sie eine Anwendung, die geschlossen wird, wenn Sie die Schließen-Taste dreimal drücken (ärgerlich, aber relevant). Sie können in den Klammern nachsehen, wie oft es gedrückt wurde. Wenn der Wert unter 3 liegt, kann Ihr else-Block Code ausführen, um den Benutzer mitzuteilen, wie oft die Taste zum Beenden gedrückt werden muss.
Wir werden uns näher mit den Bedingungen befassen, wenn wir sie in unseren Anwendungen im weiteren Verlauf der Serie einsetzen.
Lassen Sie uns nun eine Programmierschleife untersuchen. Schleifen lassen uns, wie der Name schon sagt, einen Code durchlaufen und mehrmals ausführen. Dies kann in Situationen sehr hilfreich sein, z. B. beim Auffüllen einer Liste oder beim Wiederholen eines Codes, bis eine Bedingung wahr zurückgibt.
Es gibt drei Arten von Schleifen in der Reihenfolge der häufigsten: zum, während, und tun. Jeder wird verwendet, um die Ausführung eines Codeblocks zu wiederholen, sie funktionieren jedoch anders. Hier sind jeweils Beispiele:
// if Schleife int main () int i = 9; int x = 0; für (x = 0; x < i; x++) printf("Count is: %i\n", x); return 0;
Das sieht auf den ersten Blick etwas kompliziert aus, ist es aber nicht. In den Klammern nach steht der Initiator, eine Bedingung und die Aktion. Wenn die for-Schleife startet, führt sie den Initiator aus, der in unserem obigen Fall x auf 0 setzt. Jedes Mal, wenn die Schleife ausgeführt wird (einschließlich des allerersten Mal), prüft sie die Bedingung, dh "ist x kleiner als i?" Nach jeder Schleife durch den Code führt die Schleife schließlich die Aktion aus, die darüber x um eins erhöht. Einfach. Da x jedes Mal um eins zunimmt, ist x bald nicht mehr kleiner als i und die Schleife wird beendet und das Programm läuft weiter.
// while-Schleife int main () int x = 0; während (x < 10) printf("Count is: %i\n", x); //Watch OUT! Something is missing. return 0;
Ähnlich wie bei der for-Schleife führt die while-Schleife den Code zwischen den Klammern aus, bis die Bedingung falsch ist. Da x 0 ist und wir es nicht im Codeblock ändern, wird das Obige für immer ausgeführt und eine "Endlosschleife" erstellt. Wenn Sie x erhöhen möchten, würden Sie dies im Fall unserer while-Schleife zwischen den Klammern tun:
// while-Schleife int main () int x = 0; während (x < 10) x++; printf("Count is: %i\n", x); return 0;
Die do-Schleife ist im Wesentlichen die while-Schleife, außer dass die Bedingung nach dem Codeblock ausgeführt wird. Dies bedeutet, dass bei Verwendung einer do-Schleife der Code mindestens einmal ausgeführt wird:
// do Schleife int main () int x = 0; do x ++; printf ("Anzahl ist:% i \ n", x); while (x < 10); return 0;
Zeiger können bei Programmier-Neulingen viel Verwirrung stiften oder bei C-Neueinsteigern. Es ist auch einigen Leuten nicht sofort klar, wie nützlich sie sind, aber Sie werden dies mit der Zeit lernen. Was ist also ein Zeiger??
Wie der Name schon sagt, zeigen Zeiger auf einen Ort. Insbesondere Speicherorte im Computerspeicher. Stellen Sie sich das so vor, wenn wir eine Variable erstellen (sagen wir, es ist eine ganze Zahl namens "foo", wie sie in der Programmiertheorie so beliebt ist) und geben Sie einen Wert von beispielsweise 123 an. Wir haben genau das - eine Variable mit einem Wert von 123. Wenn wir nun einen Zeiger auf foo setzen, haben wir eine Möglichkeit, indirekt darauf zuzugreifen. Das heißt, wir haben einen Zeiger vom Typ int, der auf foo zeigt und den Wert '123' enthält. Dies würde im Code so erfolgen:
int foo = 123; // Dies ist eine Ganzzahlvariable int * ptr = &foo; // Dies ist ein Zeiger auf eine Ganzzahlvariable
Klar wie Schlamm? Nicht schwitzen Zeiger sind hart - oft als das Schwierigste, wenn man die C-Sprache aufnimmt. Zeiger werden jedoch letztendlich zur zweiten Natur, und es wird in dieser Serie noch mehr über Zeiger in Objective-C geben.
Sie haben gerade einen Crash-Kurs-Überblick über die Grundlagen der C-Sprache erhalten. Dieser Teil der Serie sollte eine schnelle Einführung in C sein, um Sie auf den Rest der Serie vorzubereiten und sich darauf vorzubereiten. Dies sollte besonders für diejenigen hilfreich sein, die bereits mit der Programmierung in einer anderen Sprache vertraut sind. Wenn Sie im Allgemeinen noch nicht mit dem Programmieren vertraut sind oder immer noch Zweifel an einer der Grundlagen von C haben, lesen Sie die obigen Informationen noch einmal und lassen Sie Fragen in den Kommentaren.
Versuchen Sie vor dem nächsten Mal, Ihre eigenen Programme mit dem obigen Code zu kompilieren. Stellen Sie sich kleinen Herausforderungen, z. B. indem Sie eine Schleife zehnmal ausführen lassen und jedes Mal mit printf durch die Schleife zählen. Beim Versuch und beim Experimentieren kann nichts schaden. Wenn es schief geht, ist es wahrscheinlich noch besser, da Sie damit den richtigen Weg finden, Ihren eigenen Code zu beheben.
Für diese Woche werden wir mit einer einfachen Herausforderung enden. Sie müssen drei Programme erstellen, die mit jedem Loop-Typ bis 10 zählen. Da wir in Objective-C häufig Schleifen verwenden, ist es gut, dass Sie lernen, sie auswendig zu erstellen. Das sollte ziemlich einfach sein. Versuchen Sie also, von 10 auf 1 herunterzuzählen (wenn ++ um eins erhöht wird, was könnte der Code sein, den Sie um 1 verringern müssen?).
Im nächsten Teil dieser Serie werde ich einen Überblick über die Funktionsweise von Objective-C geben. Wir werden uns auch mit der objektorientierten Programmierung und deren Verwendung befassen und einen wirklichen Drilldown in Klassen, Instanzen, Methoden, Vererbung und mehr vornehmen.
Nächste Woche sollte Ihnen wirklich helfen zu verstehen, was Objective-C zu einer so großartigen Sprache macht und warum es die C-Sprache auf so viele nützliche Weise erweitert.
Wenn Sie Fragen haben, können Sie unten einen Kommentar hinterlassen, in dem ich mich bemühe, weiter nachzusehen, oder Sie können mir eine Nachricht auf Twitter (http://www.twitter.com/iDemonix) senden, zu der ich zurückkomme Sie so schnell wie möglich.