Im heutigen Tutorial lernen Sie Kategorien kennen und erfahren, wie Sie die Funktionalität von Cocoa-Touch-Klassen erweitern können. Dies ist unsere letzte Rate in der Learn Objective-C-Serie. Sie erhalten also eine kurze Zusammenfassung des bisher behandelten Themas und schauen dann, was Sie tun können, um Ihre Fähigkeiten als Objective-C oder iPhone zu verbessern Anwendungsentwickler.
Also, was sind Kategorien? Viele Objective-C-Tutorials und -Serien übersehen Kategorien, was schade ist, da sie eine nützliche Sprachfunktion sind, die unglaublich nützlich ist. Kategorien helfen dabei, den Code sauber und übersichtlich zu halten, da keine unnötigen Unterklassen erforderlich sind. Was wir bisher gelernt haben, wenn wir ein NSString-Objekt hätten, das wir hinzufügen möchten, fügen Sie eine Funktion hinzu, um so etwas wie eine Methode hinzuzufügen, die alle 'a'-Zeichen durch eine' 4 'ersetzt (nutzlos, aber zum Beispiel) (nur für Zwecke), dann könnten wir NSString subclassieren und die Methode selbst hinzufügen. Wir haben auch diese Art von Unterklassen gesehen, als wir unsere Autoklasse gemacht haben. Ich habe Sie am Ende dieses Tutorials gebeten, eine Unterklasse von Autos zu erstellen, damit Sie der Basisklasse weitere Funktionen hinzufügen können. Subclassing ist ein guter Ansatz, und ich sage Ihnen in keiner Weise, dass Sie Subclassing beenden möchten. In bestimmten Situationen bieten Kategorien jedoch einen besseren Ansatz, um einer Klasse zusätzliche Funktionen hinzuzufügen.
Mithilfe von Kategorien können wir einer vorhandenen Klasse Methoden hinzufügen, sodass alle Instanzen dieser Klasse in Ihrer Anwendung Ihre Funktionalität erhalten. Angenommen, wir haben 100 NSString-Objekte in Ihrer App, Sie möchten jedoch eine benutzerdefinierte Unterklasse erstellen, sodass jeder NSString eine zusätzliche Methode hat (beispielsweise reverseString). Bei Kategorien können wir die Methode einfach zu einer Kategorie hinzufügen, und alle Instanzen können die neue Methode verwenden. Die Syntax unterscheidet sich offensichtlich geringfügig von der Unterklasse und Kategorien erlauben nicht die Verwendung von Instanzvariablen. Es ist jedoch möglich, eine bereits vorhandene Methode zu überschreiben. Dies sollte jedoch mit Vorsicht erfolgen und nur, wenn dies wirklich notwendig ist.
Kategorien haben dasselbe Syntaxlayout wie eine Klasse, da sie über eine Implementierung und eine Schnittstelle verfügen. Die Schnittstelle sieht folgendermaßen aus:
@interface ClassNameHere (category) // Methodendeklaration (en) @end Die Implementierung sieht folgendermaßen aus: @implementation ClassNameHere (category) // Methodenimplementierung (en) @end
Einfach richtig? Schauen wir uns also ein Beispiel an. Wir werden eine einfache Methode erstellen, die eine Zeichenkette umkehrt. Während diese Methode praktisch unbrauchbar ist; Es ist nicht wichtig, was die Methode macht. Sie sollten bereits wissen, wie das Interface aussehen wird, aber hier ist es trotzdem:
@Interface NSString (reverse) - (NSString *) reverseString; @Ende
Nun erstellen Sie unsere Implementierung:
@implementation NSString (reverse) - (NSString *) reverseString @end
Als Nächstes müssen wir einfachen Code hinzufügen, um die Zeichenfolge umzudrehen. Da wir der NSString-Klasse Methoden hinzufügen, referenzieren wir die Zeichenfolge mit self. Um den String umzukehren, benötigen wir ein neues temporäres String-Objekt, um den umgekehrten String aufzunehmen. Die Art und Weise, wie wir die Zeichenfolge umkehren, besteht darin, die vorhandene Zeichenfolge einfach in umgekehrter Reihenfolge zu durchlaufen. Jedes Mal, wenn wir ein neues Zeichen finden, fügen wir es dem umgekehrten Zeichenfolgenobjekt hinzu. Der Code dafür lautet:
int length = [Eigenlänge]; NSMutableString * reversedString; reversedString = [[NSMutableString-Zuordnung] initWithCapacity: length]; while (length> 0) [reversedString appendString: [NSString stringWithFormat: @ "% C", [self characterAtIndex: - length]]]; return [reversedString Autorelease];
Diese Methode ist ziemlich einfach, wir werden für jedes Zeichen in der Zeichenfolge einmal durchlaufen. Wir hängen das aktuelle Zeichen mit stringWithFormat und der Zeichenbezeichnung (C) an. Wenn wir --length nennen, geben wir nicht nur die Ganzzahl length zurück, sondern subtrahieren auch davon, und so bewegt sich unsere Schleife entlang des Strings.
Wenn alles gut gegangen ist, sollten alle NSStrings, die sich bereits in unserem Projekt befinden, unserer neuen Kategorie entsprechen. Jetzt können Sie sehen, warum Kategorien so nützlich sind!
Ok, jetzt sollten alle unsere NSString-Objekte unsere reverseString-Methode haben. Um es kurz zu fassen, sollte unser Code so aussehen:
@Interface NSString (reverse) - (NSString *) reverseString; @ende @implementation NSString (reverse) - (NSString *) reverseString int length = [self length]; NSMutableString * reversedString; reversedString = [[NSMutableString-Zuordnung] initWithCapacity: length]; while (length> 0) [reversedString appendString: [NSString stringWithFormat: @ "% C", [self characterAtIndex: - length]]]; return [reversedString Autorelease]; @Ende
Jeder Codeblock (Schnittstelle und Implementierung) sollte per Konvention in eigenen Dateien abgelegt werden. Allerdings benennen wir Kategorien etwas anders. Die beiden Dateien, die wir erstellt haben, heißen: NSString + reverse.h
(Schnittstelle) und NSString + reverse.m
(Implementierung).
Dies ist eine typische Namenskonvention, die dem Muster der Klassennamen folgt, zu denen eine Kategorie, ein Pluszeichen und der Name unserer Kategorie hinzugefügt wird. Bevor Sie fortfahren, denken Sie daran, dass wir unsere Header-Datei immer noch in das Hauptprojekt einfügen müssen. Nun sollte unser Code ungefähr so aussehen:
NSString * testString = @ "Nur ein Test"; [testString reverseString]; NSLog (@ "Umgekehrt: '% @'", testString);
Wenn alles nach Plan verlief, sollte die Konsole eine umgekehrte Version von "Nur ein Test" protokollieren.!
Wenn nicht alles nach Plan verläuft, stellen Sie sicher, dass Sie den Code für reverseString ordnungsgemäß kopiert haben, und stellen Sie sicher, dass Sie die Header-Datei (* .h) für die Kategorie in Ihre Hauptcodedatei aufnehmen.
Wie Sie sehen, sind Kategorien sehr nützlich (besonders bei Strings). Sie haben eine breite Palette von Anwendungen in jedem Projekt, ein übliches, das ich verwende, ist die Validierung. Auf diese Weise kann ich alle meine Validierung an einem Ort aufbewahren und muss keine komplizierten Unterklassen verwenden.
Dies ist nicht nur das Ende des heutigen Tutorials, sondern auch das Ende der Serie über die Grundlagen von Objective-C. In den letzten Tutorials haben wir die folgenden Themen behandelt:
Ich hoffe, dass Ihnen diese Serie gefallen hat, und wenn Sie bisher nur ein oder zwei Tutorials gelesen haben, dann empfehle ich Ihnen, am ersten Tag mit einem Tutorial zu beginnen. Am Ende der Serie sollten Sie zuversichtlich genug sein, in weniger als einer Woche Ihren eigenen Code zu schreiben!
Wenn Sie Fragen zu der Serie oder den gezeigten Beispielen haben oder ein zusätzliches Tutorial zu einem anderen Bereich der Objective-C-Programmierung wünschen, können Sie unten einen Kommentar hinterlassen.
Wenn Sie Fragen zu Objective-C selbst haben, zu einem Projekt, an dem Sie gerade arbeiten, oder einfach einen technischen Rat, zögern Sie nicht, mich auf Twitter zu erwähnen oder eine direkte Nachricht auf Twitter zu veröffentlichen oder besuchen Sie meine Website und finden Sie den Weg zur Kontakt Formular!
Nun, da wir fertig sind, sind die Herausforderungen endlos. Ich empfehle Ihnen dringend, den Stift zu Papier zu bringen und sich für eine erste App zu entscheiden, die von Anfang bis Ende erstellt wird. Entwerfen Sie eine Idee und ein Design, wenden Sie dann alle Prinzipien an, die Sie aus dieser Serie gelernt haben, und lassen Sie uns wissen, was Sie sich vorstellen!
Danke fürs Lesen!