objc:start
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
objc:start [2015-01-25 00:01] – [Tutorials] "Kostenpflichtige Tutorials" mit Link zu "video2brain: Objective-C 3.0 – Das große Training" eingefügt a.kamola | objc:start [2015-03-09 19:27] (aktuell) – [Hello World] Link zu GitHub a.kamola | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Objective-C ====== | ====== Objective-C ====== | ||
+ | |||
+ | // | ||
+ | |||
+ | Objective-C ist dabei eine Erweiterung von C um Objekt-Orientierung (weshalb sich auch reine C-Programme problemlos mit einem Objective-C-Compiler übersetzen lassen). Deshalb spricht man bei Objective-C auch von einer //C-Ebene// und einer // | ||
+ | |||
+ | Da Objective-C fast ausschließlich von Apple verwendet wird ist die Sprache fast untrennbar von Apples Frameworks [[apple: | ||
+ | |||
+ | ===== Hello World ===== | ||
+ | |||
+ | <code objc helloworld.m> | ||
+ | #import < | ||
+ | |||
+ | int main(void) { | ||
+ | printf(" | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | [[https:// | ||
+ | ==== Hello World mit OOP ==== | ||
+ | |||
+ | Ein Beispiel mit [[lexikon: | ||
+ | |||
+ | <code objc helloworld.m> | ||
+ | #import < | ||
+ | #import < | ||
+ | |||
+ | @interface Hello | ||
+ | - (void) init; | ||
+ | - (void) say; | ||
+ | @end | ||
+ | |||
+ | @implementation Hello | ||
+ | - (void) init { | ||
+ | [super init]; | ||
+ | } | ||
+ | |||
+ | - (void) say { | ||
+ | printf(" | ||
+ | } | ||
+ | @end | ||
+ | |||
+ | int main() { | ||
+ | Hello *hello = [Hello new]; | ||
+ | |||
+ | [hello say]; | ||
+ | [hello free]; | ||
+ | |||
+ | retrun 0; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== Dateien ===== | ||
+ | |||
+ | ^ Datei-Endung ^ Beschreibung ^ | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | |||
+ | In Dateien mit der Endung '' | ||
+ | |||
+ | ===== Compilieren ===== | ||
+ | |||
+ | Auf der Konsole lassen sich Objective-C-Dateien am einfachsten mit '' | ||
+ | |||
+ | <code bash> | ||
+ | clang foobar.m -o foobar -framework Foundation | ||
+ | </ | ||
+ | |||
+ | Statt mit '' | ||
+ | |||
+ | <code bash> | ||
+ | gcc foobar.m -o foobar -framework Foundation | ||
+ | </ | ||
+ | |||
+ | ===== Konstanten ===== | ||
+ | |||
+ | Konstanten werden, wie in [[c: | ||
+ | |||
+ | Dieses Beispiel definiert eine Konstante '' | ||
+ | |||
+ | <code objc> | ||
+ | #define FOOBAR 23 | ||
+ | </ | ||
+ | |||
+ | Wenn Objective-C – wie in der Regel üblich – mit dem [[apple: | ||
+ | |||
+ | Quelle: [[http:// | ||
+ | |||
+ | ===== Typen ===== | ||
+ | |||
+ | ^ Typ ^ Erklärung ^ Erlaubte Werte ^ | ||
+ | | '' | ||
+ | |||
+ | ===== Code-Blöcke ===== | ||
+ | |||
+ | Code-Abschnitte lassen sich in Blöcke kapseln und durch Zuweisung zu einer Variable (hier '' | ||
+ | |||
+ | <code objc> | ||
+ | void (^foobar)(void) = ^{ | ||
+ | // Code | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Aufruf des Code-Blocks: | ||
+ | |||
+ | <code objc> | ||
+ | foobar(); | ||
+ | </ | ||
+ | |||
+ | ===== Klassen ===== | ||
+ | |||
+ | ==== Einbinden von Dateien ==== | ||
+ | |||
+ | Dateien werden in Objective-C üblicherweise mit der [[lexikon: | ||
+ | |||
+ | ===== Methoden ===== | ||
+ | |||
+ | ==== Klassen-Methoden ==== | ||
+ | |||
+ | // | ||
+ | |||
+ | Klassen-Methoden sind in Objective-C an einem '' | ||
+ | |||
+ | <code objc> | ||
+ | + (void)fooClassMethod; | ||
+ | </ | ||
+ | |||
+ | Die Klassen-Methode kann nun in anderen Klassen wie folgt direkt verwendet werden: | ||
+ | |||
+ | <code objc> | ||
+ | [FooBar fooClassMethod]; | ||
+ | </ | ||
+ | |||
+ | ==== Instanz-Methoden ==== | ||
+ | |||
+ | // | ||
+ | |||
+ | Instanz-Methoden sind in Objective-C an einem '' | ||
+ | |||
+ | <code objc> | ||
+ | - (void)barInstanceMethod; | ||
+ | </ | ||
+ | |||
+ | Instanz-Methoden können in anderen Klassen erst verwendet werden, wenn vorher ein Objekt mit der Klasse erzeugt wurde: | ||
+ | |||
+ | <code objc> | ||
+ | FooBar *foobar = [[FooBar alloc] init]; | ||
+ | |||
+ | [foobar barInstanceMethod]; | ||
+ | </ | ||
+ | |||
+ | ==== Objekte auf Methoden überprüfen ==== | ||
+ | |||
+ | Zur Verhinderung von Laufzeitfehlern, | ||
+ | |||
+ | <code objc> | ||
+ | if([foobar respondsToSelector: | ||
+ | // Code, if the method exists on the object | ||
+ | } else { | ||
+ | // Alternate code, if the method doesn' | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== Delegates ===== | ||
+ | |||
+ | ==== Eigenen Delegate definieren ==== | ||
+ | |||
+ | Delegates werden über ein Protokoll in der Header-Datei einer Klasse definiert: | ||
+ | |||
+ | <code objc FooBar.h> | ||
+ | #import < | ||
+ | |||
+ | @protocol FooBarDelegate; | ||
+ | |||
+ | @interface FooBar: UIViewController | ||
+ | |||
+ | // Delegate property of the class | ||
+ | @property (nonatomic, weak) id< | ||
+ | |||
+ | @end | ||
+ | |||
+ | // Delegate | ||
+ | |||
+ | @protocol FooBarDelegate < | ||
+ | |||
+ | @required | ||
+ | -(void)requiredDelegateMethod; | ||
+ | |||
+ | @optional | ||
+ | -(void)optionalDelegateMethodOne; | ||
+ | -(void)optionalDelegateMethodTwo: | ||
+ | |||
+ | @end | ||
+ | </ | ||
+ | |||
+ | In der Implementierung kann immer auf die Delegate-Methode verwiesen werden, wobei mit folgender Abfrage sichergestellt werden sollte, dass die Delegate-Methode auch vorhanden ist: | ||
+ | |||
+ | <code objc> | ||
+ | if (self.delegate && [self.delegate respondsToSelector: | ||
+ | [self.delegate optionalDelegateMethodOne]; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Um den Delegate in einer anderen Klasse zu verwenden muss nun einfach die Header-Datei der Klasse mit dem Delegate importiert und der Delegate im Interface definiert werden: | ||
+ | |||
+ | <code objc> | ||
+ | #import " | ||
+ | |||
+ | @interface FooViewController : UIViewController < | ||
+ | </ | ||
+ | |||
+ | Quelle: [[http:// | ||
===== Links ===== | ===== Links ===== |
objc/start.1422140461.txt.gz · Zuletzt geändert: 2015-01-25 00:01 von a.kamola