Erste Schritte mit Objective-C

Einführung

Da sich die Grundlagen von C noch in Ihrem Gedächtnis befinden, ist es an der Zeit, sich mit Objective-C vertraut zu machen. Der Hauptunterschied zu C ist, dass Objective-C eine objektorientierte Programmiersprache ist, während C eine prozedurale Programmiersprache ist. Das bedeutet, dass wir zuerst Objekte verstehen müssen und wie sie sich auf Klassen beziehen. Weitere Schlüsselkonzepte, die in diesem Artikel behandelt werden, sind Objektmitteilung, Einkapselung und Vererbung.


Die Ursprünge von Objective-C

Objective-C und Cocoa sind zwei Schlüsselkomponenten der iOS-Plattform. Obwohl die iOS-Plattform noch relativ jung ist, wurde Objective-C in den frühen 80er Jahren von Brad Cox und Tom Love bei StepStone entwickelt. Die Sprache wurde entwickelt, um die robuste und agile C-Programmiersprache mit der eleganten Smalltalk-Sprache zu kombinieren. Objective-C ist eine strikte Obermenge von C und im Gegensatz zu C eine Programmiersprache auf hohem Niveau. Der Hauptunterschied zwischen C und Objective-C besteht darin, dass diese eine objektorientierte Programmiersprache ist, während C eine prozedurale Programmiersprache ist.

Wie kam es zu einer Sprache, die in den 1980er Jahren entwickelt wurde? Kurz nachdem NeXT von Steve Jobs gegründet wurde, wurde Objective-C von StepStone lizenziert. NeXT entwickelte NeXTSTEP, ein Toolkit für die Benutzeroberfläche für das in Objective-C entwickelte NeXT-Betriebssystem. Obwohl NeXTSTEP ein revolutionäres Werkzeugset zur Verfügung stellte, erzielte das NeXT-Betriebssystem auf dem Markt nur eine geringe Zugkraft. 1996 übernahm Apple NeXT und NeXTSTEP wurde Cocoa. Letzteres wurde mit der Einführung von OS X im März 2001 und später mit der Veröffentlichung des iPhone und des Betriebssystems iOS zum Mainstream.


Objekt orientierte Programmierung

Bei der prozeduralen Programmierung besteht ein Programm aus eine Reihe von Prozeduren oder Routinen die ausgeführt werden, um einen bestimmten Zustand zu erreichen. In der objektorientierten Programmierung jedoch, Eine Sammlung von Objekten interagiert und arbeitet zusammen eine Aufgabe erledigen. Obwohl das Endergebnis identisch sein kann, unterscheiden sich die Methodik und die zugrunde liegenden Paradigmen erheblich. Modularität und Wiederverwendbarkeit von Code sind zwei der Hauptvorteile objektorientierter Programmiersprachen, wie wir bald sehen werden.


Ziel-C, Kakao und Kakao-Touch

Entwickler, die sich mit den iOS- und OS X-Ökosystemen noch nicht auskennen, werden oft durch die Beziehung zwischen Objective-C, Cocoa (OS X) und Cocoa Touch (iOS) verwirrt. Was ist Cocoa Touch und in welcher Beziehung steht es zu Objective-C? Cocoa ist Apples native Anwendungsprogrammierschnittstelle (API) für iOS- und OS X-Plattformen. Objective-C ist die Sprache, die Kakao antreibt. Während sich dieser Artikel hauptsächlich auf die Programmiersprache Objective-C konzentriert, werden wir uns die APIs von Cocoa und Cocoa Touch später in dieser Serie genauer ansehen.


Klassen, Objekte und Instanzen

Ein weiterer Stolperstein für Entwickler, die neu in der objektorientierten Programmierung sind, ist die Unterscheidung zwischen Klassen, Objekten und Instanzen. Eine Klasse ist eine Besetzung oder ein Bauplan zum Erstellen von Objekten, während Instanzen eindeutige Vorkommen einer Klasse sind. Ein Objekt ist eine Datenstruktur mit Status und Verhalten. Trotz des subtilen Unterschieds zwischen Objekten und Instanzen werden beide Begriffe häufig austauschbar verwendet.

Schauen wir uns ein Beispiel an: Toaster. Bevor ein Toaster hergestellt wird, erstellen Ingenieure einen Bauplan, der einer Klasse entspricht. Jeder aus dem Bauplan erstellte Toaster ist eine Instanz oder ein eindeutiges Vorkommen der Klasse. Obwohl jeder Toaster aus demselben Bauplan (derselben Klasse) erstellt wird, haben sie jeweils ihren eigenen Zustand (Farbe, Anzahl der Steckplätze usw.) und ihr Verhalten.

Instanzvariablen und Kapselung

Der Status einer Instanz wird in ihren Instanzvariablen oder den Attributen des Objekts gespeichert und definiert, wenn Sie möchten. Dies bringt uns zu einem anderen Schlüsselmuster der objektorientierten Programmierung: Verkapselung. Kapselung bedeutet, dass die interne Darstellung eines Objekts privat ist und nur dem Objekt selbst bekannt ist. Dies mag auf den ersten Blick wie eine starke Einschränkung erscheinen. Das Ergebnis ist jedoch modularer und lose gekoppelter Code.

Lassen Sie uns die Kapselung an einem anderen Beispiel veranschaulichen. Die Geschwindigkeit eines Autos wird durch die Innenteile des Autos gemessen, der Fahrer kennt jedoch die Geschwindigkeit des Autos, indem er auf den Tachometer schaut. Der Fahrer muss die Innenausstattung des Fahrzeugs nicht kennen oder verstehen, um die Geschwindigkeit des Fahrzeugs zu kennen. Ebenso muss der Fahrer des Autos nicht verstehen, wie Motoren funktionieren, um das Auto fahren zu können. Die Details, wie ein Auto funktioniert, sind dem Fahrer verborgen. Der Zustand und das Verhalten des Autos ist dem Fahrer verborgen und ist zugänglich durch die Fahrzeugschnittstelle (Lenkrad, Bremspedal, Armaturenbrett usw.).

Erbe

Ein weiteres mächtiges Paradigma der objektorientierten Programmierung ist Klassenvererbung. Wenn Klasse A a ist Unterklasse von Klasse B erbt Klasse A die Attribute und das Verhalten von Klasse B. Klasse B wird als übergeordnete Klasse oder Superklasse von Klasse A bezeichnet. Die Vererbung fördert auch die Wiederverwendbarkeit und Modularität von Code.

Methoden und Eigenschaften

Methoden sind Subroutinen, die einer Klasse zugeordnet sind. Sie definieren das Verhalten einer Klasse und ihrer Instanzen. Die Methoden einer Klasse haben Zugriff auf die Interna einer Instanz und können dadurch den Status der Instanz ändern. Mit anderen Worten, der Zustand einer Instanz (d. H Instanzvariablen) wird durch die Methoden einer Instanz (d. h. der Instanzmethoden).

Aufgrund des Einkapselungsmusters kann auf die Instanzvariablen einer Klasseninstanz nicht frei zugegriffen werden. Stattdessen wird über sie zugegriffen Getter und Setter, Methoden mit dem einzigen Zweck, Instanzvariablen abzurufen und festzulegen. Eigenschaften sind eine Funktion von Objective-C, die die Erstellung von Accessoren (Getter und Setter) einfach macht. Trotz der Nützlichkeit von Zugriffsmethoden wird das Schreiben von Zugriffsmethoden für jede Instanzvariable schnell umständlich. Wir werden die Eigenschaften später in diesem Artikel genauer untersuchen. Betrachten Sie Eigenschaften zunächst als Wrapper für Instanzvariablen, die die Arbeit mit Instanzvariablen über Getter und Setter erleichtern.


Lernen durch Beispiel

Lassen Sie uns unser Wissen in die Praxis umsetzen, indem Sie ein neues Xcode-Projekt erstellen, mit dem Sie arbeiten können. Erstellen Sie ein neues Projekt in Xcode, indem Sie auswählen Neu> Projekt… von dem Datei Speisekarte.

Wählen Sie wie im vorherigen Artikel die Option Befehlszeilenwerkzeug Projektvorlage in der Anwendung Kategorie unter der OS X Sektion.

Stellen Sie das ein Produktname zu Bücher und geben Sie dem Projekt einen Organisationsnamen und eine Firmenkennung. Für dieses Projekt ist es wichtig, den Projekttyp auf festzulegen Stiftung. Der Grund für diese Entscheidung wird später in diesem Artikel deutlich.

Teilen Sie Xcode mit, wo Sie das Projekt speichern möchten, und klicken Sie auf die Schaltfläche Erstellen Taste. Möglicherweise stellen Sie fest, dass das Projekt anders aussieht als das Projekt, das wir zum Lernen von C erstellt haben. Nehmen wir uns einen Moment Zeit, um die Unterschiede zu sehen.


Projektübersicht

Das Projekt enthält einige Dateien und Ordner mehr als das Befehlszeilentool, das wir im vorherigen Artikel erstellt haben. Zusätzlich zu main.m und Bücher.1, Es gibt zwei neue Ordner, Unterstützende Dateien und Frameworks, jeder enthält einen Artikel.

Unterstützende Dateien enthält eine Datei mit dem Namen Bücher-Prefix.pch. Das .pch Die Dateierweiterung sagt uns, dass dies eine vorkompilierte Header-Datei. Ihr Zweck wird später in dieser Serie klar.

Das Frameworks Ordner enthält die Frameworks, mit denen das Projekt verknüpft ist. Was ist ein Rahmen? Ein Framework ist ein Bundle oder Verzeichnis, das eine Bibliothek einschließlich ihrer Ressourcen wie Bilder und Header-Dateien enthält. Das Konzept einer Header-Datei wird in einer Minute klar. Das Frameworks Ordner enthält derzeit ein Element, Foundation.framework.

Beim Erstellen des Projekts legen Sie den Projekttyp auf fest Stiftung, Dies bedeutet, dass das Projekt an das Fundament-Framework gekoppelt ist. Das Foundation-Framework ist ein grundlegender Satz von Objective-C-Klassen. Später in dieser Serie werden wir uns das Fundament-Framework genauer ansehen.


Erstellen Sie eine Klasse

Es ist Zeit, deinen ersten Kurs zu erstellen. Wann immer Sie eine neue Datei erstellen (Datei> Neu> Datei… ) wird eine Liste mit Dateivorlagen angezeigt. Wählen Kakao von dem OS X Abschnitt und wählen Sie die Ziel-C-Klasse Vorlage zum Erstellen einer neuen Objective-C-Klasse. Klicken Nächster weitermachen.

Geben Sie der neuen Klasse einen Namen Buch und setzen Sie seine Unterklasse auf NSObject. Wie wir zuvor gesehen haben, indem wir die neue Klasse zu einer Unterklasse machen NSObject, Die neue Klasse erbt die Attribute und das Verhalten von NSObject. Dies bedeutet, dass das Neue Buch Klasse bekommt einige Funktionen kostenlos.

Klicken Nächster um fortzufahren und Xcode anzugeben, wo Sie die neue Klasse speichern möchten. Stellen Sie sicher, dass Sie die neue Klasse irgendwo in Ihrem Xcode-Projekt speichern.

Xcode hat dem Projekt zwei neue Dateien hinzugefügt, Book.h und Book.m. Book.h ist die Headerdatei des Buch Klasse und macht die Klassenschnittstelle verfügbar, wie wir zuvor gesehen haben. Eine Klassenschnittstelle enthält die Eigenschaften und Methoden der Klasse und gibt auch die Superklasse der Klasse an. Book.m ist die Implementierungsdatei der Klasse und definiert ihr Verhalten durch Implementierung der in der Klassenheaderdatei deklarierten Methoden.

Header-Datei

Öffnen Book.h und erforschen Sie den Inhalt. Abgesehen von einigen Kommentaren oben enthält die Header-Datei nur drei Codezeilen. Die erste Zeile importiert die Header-Datei des Foundation Frameworks. Dies stellt sicher, dass die Buch Klasse hat Zugriff auf die Klassen und Protokolle, die im Foundation Framework deklariert sind.

#einführen 

Die zweite und dritte Zeile bilden ein Paar. In Objective-C beginnt jede Klassenschnittstelle mit @Schnittstelle und endet mit @Ende, Dies sind beide Anweisungen des Compilers, dh Befehle oder Anweisungen für den Compiler. Das @Schnittstelle Direktive folgt der Name der Klasse, ein Doppelpunkt und die Klasse Oberklasse-wenn anwendbar. Wie wir zuvor gesehen haben, ist die übergeordnete Klasse oder Superklasse die Klasse, von der sie Attribute und Verhalten erbt.

@Interface Book: NSObject @end

NSObject ist die Wurzelklasse der Mehrheit der Objective-C-Klassen. Die ersten zwei Buchstaben, NS, beziehen Sie sich auf NeXTSTEP, wie wir weiter oben in diesem Artikel gesehen haben. Durch das Erben von NSObject, Klassen verhalten sich wie Objective-C-Klassen und erben eine grundlegende Schnittstelle für das Laufzeitsystem.

Implementierungsdatei

Bevor wir Änderungen an der Buch Klasse, lassen Sie uns einen kurzen Blick darauf werfen Book.m, die Implementierungsdatei der Klasse. Anstatt das Foundation Framework zu importieren, importiert die Implementierungsdatei die Header-Datei von Buch Klasse. Warum ist das nötig? Die Implementierungsdatei muss wissen, welche Eigenschaften und Methoden in der Headerdatei deklariert sind, bevor das Verhalten (d. H. Die Methoden) der Klasse implementiert werden kann. Auf die Importanweisung folgt die Implementierung der Klasse, die durch angegeben wird @Implementierung und @Ende.

Eigenschaften und Methoden hinzufügen

Das Buch Klasse ist in der aktuellen Implementierung nicht sehr nützlich. Gehen Sie zur Header-Datei und fügen Sie drei Eigenschaften hinzu Jahr, Titel, und Autor, und fügen Sie eine Methode mit dem Namen bookInfo.

Eigenschaften werden mit deklariert @Eigentum Schlüsselwort und kann irgendwo in der Klasse deklariert werden @Schnittstelle Block. Das @Eigentum Auf das Schlüsselwort folgt der Typ und der Name der Eigenschaft. Vergessen Sie nicht das Sternchen vor dem Titel und Autor Eigenschaften, da ein Cocoa-Objekt immer als Zeiger referenziert wird.

#einführen  @ Interface Book: NSObject @ Eigenschaft int Jahr; @ property NSString * title; @ property NSString * Autor; - (NSString *) bookInfo; @Ende

Die Methodendeklaration ähnelt etwas einem Funktionsprototyp, es gibt jedoch einige wichtige Unterschiede. Die Methodendeklaration beginnt mit einem Minuszeichen, um anzuzeigen, dass es sich um eine Instanzmethode handelt. Klassenmethoden werden ein Pluszeichen vorangestellt. Dem Minuszeichen folgt der Rückgabetyp der Methode zwischen Klammern, einer Instanz von NSString, und der Name der Methode. Die Methodendeklaration endet mit einem Semikolon.

Ich bin sicher, Sie fragen sich was NSString ist und warum es als Zeiger referenziert werden muss. Das NSString class ist Mitglied des Foundation Frameworks. Es deklariert die Schnittstelle für ein Objekt, das eine unveränderliche Zeichenfolge verwaltet. Im vorigen Artikel haben wir gesehen, dass eine Zeichenfolge in C durch ein Array von Zeichen dargestellt werden kann NSString Klasse tut, verwaltet es eine Reihe von Zeichen unter der Haube. Der Vorteil der Verwendung NSString ist, dass es die Arbeit mit Saiten wesentlich einfacher macht.

Umsetzung bookInfo

Nun, da wir das erklärt haben bookInfo Methode in der Header-Datei der Klasse, ist es Zeit, sie in der Implementierungsdatei der Klasse zu implementieren. Öffnen Book.m und fügen Sie das folgende Code-Snippet irgendwo in der @Implementierung Block. Bevor wir die Implementierung von brechen bookInfo unten müssen wir zuerst über Object Messaging sprechen.

- (NSString *) bookInfo NSString * bookInfo = [NSString stringWithFormat: @ "% @ wurde von% @ geschrieben und in% i veröffentlicht", self.title, self.author, self.year]; return bookInfo; 

Objektnachrichten

Wir wissen bereits, dass das Verhalten einer Klasse durch ihre Methoden definiert wird. Um eine Methode für ein Objekt aufzurufen, wird eine Nachricht an das Objekt gesendet. Überprüfen Sie das folgende Codefragment, um dieses Konzept zu verstehen. Brechen wir es Zeile für Zeile auf. In der ersten Zeile deklarieren wir einen neuen String und weisen ihm einen konstanten String zu, indem der String in Anführungszeichen gesetzt und mit einem vorangestellten vorangestellt wird @ Zeichen.

NSString * string = @ "Dies ist eine Zeichenfolge."; int length = [Stringlänge]; NSLog (@ "Die Länge der Zeichenfolge beträgt% i. \ N" Länge);

In der zweiten Zeile senden wir eine Nachricht von Länge zur String-Instanz. Mit anderen Worten, wir nennen die Methode Länge in der String-Instanz und die Methode gibt eine Ganzzahl zurück. Die Ganzzahl wird dem zugewiesen Länge Variable vom Typ int. In der letzten Zeile protokollieren wir die Längenvariable in der Konsole durch Aufruf von NSLog Funktion, wie wir im vorherigen Artikel gesehen haben.

Das Senden von Nachrichten an Objekte ist etwas, das Sie häufig tun werden. Daher ist es wichtig, die Syntax zu verstehen. Auch wenn die Syntax seltsam aussieht, wenn Sie Objective-C noch nicht kennen, ist das gar nicht so schwer zu verstehen. Zwischen eckigen Klammern befindet sich das Objekt links und der Name der Nachricht oder der Methode rechts.

[Objektnachricht];

Methoden, die Argumente akzeptieren, sehen ein wenig anders aus, die allgemeine Syntax ist jedoch identisch. Das NSString Klasse hat zum Beispiel eine andere Methode substringFromIndex:. Der Doppelpunkt am Ende des Namens zeigt an, dass diese Methode ein Argument akzeptiert. Das Aufrufen dieser Methode für einen String sieht folgendermaßen aus:

NSString * substring = [Zeichenfolge substringFromIndex: 5];

Objective-C ist bekannt für seine langen und ausführlichen Methodennamen. Sehen Sie sich das folgende Beispiel an, das einen Methodennamen mit mehreren Argumenten enthält. Sie müssen zugeben, dass der Name der Methode eindeutig die Funktion der Methode angibt. Der Methodenname wird in Blöcke aufgeteilt, wobei jeder Abschnitt ein Argument akzeptiert. Wenn Sie mit dem iOS-SDK arbeiten, werden sich die Objektnachrichten wirklich bemerkbar machen.

NSString * anotherString = [string stringByPaddingToLength: 5 withString: @ "einige Zeichenfolge" startingAtIndex: 2];

Bevor wir fortfahren, müssen wir die Implementierung von überdenken bookInfo. Die Methodenimplementierung beginnt mit der Wiederholung der Methodendeklaration. Das nachfolgende Semikolon wird durch ein Paar geschweifte Klammern ersetzt, die die Implementierung der Methode umgeben. Wir deklarieren zuerst eine neue Zeichenfolge, bookInfo, und weisen Sie ihm eine neue Zeichenfolge zu, die mit den Attributen unserer Buchinstanz erstellt wurde (Titel, Autor, und Jahr). Am Ende von bookInfo Methode geben wir den neuen String zurück, bookInfo, denn das erwartet die Methode, eine Zeichenkette als Rückgabetyp.

Drei Dinge bedürfen einer Klarstellung. Zuerst die Methode stringWithFormat: ist eine Klassenmethode und keine Instanzmethode. Wir wissen das, weil die Methode für die Klasse selbst aufgerufen wird, NSString, nicht auf einer Instanz der Klasse. Klassenmethoden sind in objektorientierten Programmiersprachen üblich. Zweitens wird der Formatbezeichner für ein Objekt durch die dargestellt @ Symbol (vorangestelltes Prozentzeichen). Beide Titel und Autor sind Objektstrings, um genau zu sein. Drittens die selbst Schlüsselwort verweist immer auf die Klasseninstanz. In diesem Fall, selbst bezieht sich auf Buch Instanz, zu der die Methode bookInfo gehört.

Accessors erneut besucht

Wenn Sie mit anderen objektorientierten Sprachen gearbeitet haben, kann der Zugriff auf Instanzvariablen in Objective-C verwirrend sein. Beim Schreiben greifen wir nicht direkt auf eine Instanzvariable zu selbst.titel. Dies ist nichts anderes als eine Abkürzung für [Selbsttitel]. Letzteres bedeutet, dass wir die getter-Methode verwenden, um die Instanz nach der benannten Instanzvariablen zu fragen Titel. Gleiches gilt für das Setzen einer Instanzvariablen. Schauen Sie sich den folgenden Code-Ausschnitt an. Wie Sie sehen können, ist die Verwendung von selbst.titel ist nichts weiter als syntaktischer Zucker.

// Diese Zuordnung… self.title = @ "Der Hobbit"; //… ist äquivalent zu… [self setTitle: @ "The Hobbit"];

Ich würde, Null, und NULL

Ich würde

Bevor wir mit der Verwendung beginnen Buch Klasse, ich möchte über ein paar Stichworte sprechen, die die Leute von Zeit zu Zeit verwirren. Wann immer Sie ein Objekt speichern möchten, ohne den Typ dieses Objekts explizit zu definieren, verwenden Sie die Ich würde Datentyp, der auch der Standardtyp für Rückgabe- und Argumentdeklarationen für Objective-C-Methoden ist.

Die Macht und Nützlichkeit der Ich würde Der Datentyp geht jedoch noch viel weiter. Das Ich würde Der Datentyp ist eine Schlüsselkomponente der dynamischen Typisierung und dynamischen Bindung von Objective-C. Es ist wichtig zu verstehen, dass die Ich würde Datentyp enthält keine Informationen über das Objekt selbst, außer dass es sich um ein Objekt handelt.

In Objective-C weiß jedes Objekt, zu welcher Klasse es gehört (durch ein ist ein Variable) und dies ist kritisch. Warum das? Eine der Stärken von Objective-C ist die dynamische Typisierung, dh die Typprüfung wird zur Laufzeit statt zur Kompilierzeit durchgeführt.

Jedoch seit dem Ich würde Da der Datentyp dem Compiler nichts über die Klasse mitteilt, zu der das Objekt gehört, muss das Objekt selbst diese Informationen an den Compiler übergeben.

Denken Sie daran, dass es absolut akzeptabel ist, ein Objekt statisch in Objective-C einzugeben, indem Sie die Klasse eines Objekts explizit angeben, anstatt die Ich würde Datentyp.

Dynamische Bindung

Dies bringt uns zu einer weiteren wichtigen Komponente der Objective-C-Laufzeit, der dynamischen Bindung. In Objective-C besteht ein wichtiger Unterschied zwischen Funktionen und Nachrichten darin, dass eine Nachricht und das empfangende Objekt erst zur Laufzeit zusammengefügt werden.

Was bedeutet das und warum ist das wichtig? Dies bedeutet, dass die als Reaktion auf eine an ein Objekt gesendeten Nachricht aufgerufene Methode zur Laufzeit bestimmt wird, wenn sowohl die Nachricht als auch das Objekt bekannt sind. Dies ist die sogenannte dynamische Bindung.

Null und NULL

In Objective-C das Schlüsselwort Null ist als a definiert Null Objekt, das heißt ein Ich würde mit einem Wert von 0. Unter der Haube gibt es keinen Unterschied Null, Null, und NULL, und es ist möglich, Nachrichten an jeden von ihnen zu senden, ohne dass eine Ausnahme ausgelöst wird.

Die Konvention ist zu verwenden Null für Objekte, Null für den Unterricht und NULL Andernfalls. Nachrichten senden können Null, Null, und NULL hat Vorteile, hat aber auch Nachteile. Weitere Informationen zu Null, Null, und NULL, Werfen Sie einen Blick auf diese Frage zu Stack Overflow.


Objekte erstellen

Öffnen main.m und fügen Sie eine Importanweisung hinzu, um die Header-Datei des zu importieren Buch Klasse. Anstatt spitze Klammern zu verwenden, verwenden wir doppelte Anführungszeichen, um die Header-Datei von zu importieren Buch Klasse. Für lokale Dateien werden doppelte Anführungszeichen verwendet, während für globale Include-Werte spitze Klammern verwendet werden, wobei der Include-Pfad des Projekts verwendet wird.

#einführen  #import "Book.h"

Direkt unter dem NSLog Aufruf, fügen Sie das folgende Snippet hinzu, um eine Instanz von zu erstellen Buch Klasse.

Book * book1 = [[Buchzuordnung] init]; book1.title = @ "Der Hobbit"; book1.author = @ "JRR Tolkien"; book1.year = 1937;

In der ersten Zeile deklarieren wir eine Variable vom Typ Buch und initialisieren Sie es. Dies ist ein gutes Beispiel, um verschachtelte Methodenaufrufe zu veranschaulichen. Die erste Methode forderte die Buch Klasse ist zuteilen. Die Details dieses Anrufs sind nicht wichtig. Der Kern ist, dass die Erinnerung ist zuteilenfür das neue Objekt festgelegt und das Objekt wird erstellt.

Aufgrund der Verschachtelung der Anrufe wird der drin Die Methode wird für das neue Objekt aufgerufen, das von erstellt wurde zuteilen Methode. Das drin Methode drinialisiert das neue Objekt, richtet es ein und macht es einsatzbereit. Das drin Die Methode gibt die Instanz zurück und weist sie in unserem Beispiel der zu Buch 1 Variable.

Die nächsten drei Zeilen sollten bekannt sein. Wir legen den Titel, den Autor und das Erscheinungsjahr des neuen Buches fest.

Erstellen wir ein weiteres Buch und fügen Sie beide Bücher zu einem Objective-C-Array hinzu. Die Erstellung des zweiten Buches ist nicht neu. Der einzige Unterschied besteht darin, dass wir die Setzer der Klasse explizit verwendet haben, um die Instanzvariablen der neuen Instanz festzulegen.

Buch * book2 = [[Buchzuordnung] init]; [book2 setTitle: @ "Die Gefährtenschaft des Ringes"]; [book2 setAuthor: @ "JRR Tolkien"]; [book2 setYear: 1954]; NSArray * books = [[NSArray-Zuordnung] initWithObjects: book1, book2, nil];

In der letzten Zeile erstellen wir eine Instanz von NSArray, eine andere Klasse des Foundation-Frameworks. Das NSArray Klasse ist ein Array, in dem eine geordnete Liste von Objekten gespeichert werden kann. Genau wie bei den Book-Instanzen weisen wir Speicher zu und initialisieren das neue Array.

Anstatt zu rufen drin, Wir rufen jedoch an initWithObjects:initWithObjects: ist ein ausgewiesener Initialisierer, was bedeutet, dass es ein drin Methode mit einigen zusätzlichen Schnickschnack, um die Objektinitialisierung zu erleichtern.

initWithObjects: akzeptiert eine beliebige Anzahl von Objekten, die Sie im Array speichern möchten. Die Liste der Objekte sollte immer mit enden Null.

Mischen von C und Objective-C

Ich habe bereits mehrfach erwähnt, dass Objective-C eine strikte Obermenge von C ist und dass wir C und Objective-C frei kombinieren können. Mal sehen, wie das funktioniert. Wir beginnen mit einem einfachen ansonsten Anweisung, um zu prüfen, ob das Array Objekte enthält. Senden Sie dem Array eine Nachricht von Anzahl, Es wird die Anzahl der enthaltenen Objekte zurückgegeben.

Wenn das Array Objekte enthält, verwenden wir a zum Schleife, um die Objekte im Array zu durchlaufen. Während jeder Iteration fragen wir das Array nach dem Objekt am Index ich und senden Sie das Objekt - eine Instanz des Buch Klasse-eine Nachricht von bookInfo. Wie wir früher gesehen haben, bookInfo gibt eine Instanz von zurück NSString, die wir an der Konsole anmelden.

if ([Anzahl der Bücher]> 0) für (int i = 0; i < [books count]; i++)  Book *aBook = [books objectAtIndex:i]; NSLog(@"%@", [aBook bookInfo]);  

Fazit

Ich bin mir sicher, dass Sie von Objective-C etwas überwältigt sind. Das ist normal. Obwohl Objective-C nicht mehr als eine dünne Schicht über der C-Sprache ist, ist viel los.

Während Objective-C mehr bietet als in diesem Artikel beschrieben, kennen Sie jetzt die Grundlagen und können mit dem iOS SDK arbeiten. Im nächsten Artikel werden wir uns das iOS SDK ansehen und seine verschiedenen Komponenten untersuchen.