Einführung in Objective-C
Objective-C
Objective-Cist ein um objektorientierte Sprachkonstrukte erweiterter C-Dialekt.Objective-Cist eine reine C-Erweiterung, jeder C-Code ist auch in Objective-C gültig.C++Code kann überObjective-C++eingebunden werden.
Standard-Typen (Auszug)
-
C-Datentypen:
void, short, int, float, double, char*, void* -
Objective-C:
BOOL(YES/NObzw.TRUE/FALSE)id(repräsentiert ein beliebiges Objekt)NSObject(Basisklasse für Objekte)
-
nil: vergleichbar mitnull, Aufrufe aufnilsind jedoch möglich -
Foundation
NSString,NSDate,NSURL,NSDataNS(Mutable)Array,NS(Mutable)Dictionary,NS(Mutable)Set
Methodensignaturen und Methodenaufrufe
-
Methodensignaturen:

-
Methodenaufrufe:

Objektallokation, Initializer
[SomeObject alloc]reserviert Speicher für ein neues Objekt[someInstance init...]-Methoden initialisieren das Objekt[[SomeObject alloc] init...]ist vergleichbar mit einem Konstruktor-Aufruf- Viele Klassen stellen Convenience-Konstruktoren (statische Factory-Methoden)
[SomeObject someObjectWith...]bereit, dieallocundinit...in einem Schritt erledigen
Strings, Logging
// "..." erzeugt einen C-String
const char *helloC = "Hello";
// @"..." erzeugt ein NSString-Objekt
NSString *helloObjC = @"Hello";
// Strings formatieren
NSString *formatted = [NSString stringWithFormat:@"%s %i %@", helloC, 5, helloObjC];
// Konvertierung zwischen char* und NSString
const char *utf8CString = [helloObjC UTF8String];
NSString *fromCString = [NSString stringWithUTF8String: helloC];
// Logging
NSLog(@"%@, %@ and %i", someObject, helloObjC, 5);
NSLog([someObject description]);
Klassen
-
Eine Objective-C Klasse
SomeObjectbesteht aus:- Klassendefinition
@interfaceinSomeObject.h - Implementierung
@implementationinSomeObject.m
- Klassendefinition
Klassendefinition @interface
@interface SomeObject : NSObject {
// Deklaration von Instanzvariablen (ivars)
}
// Deklaration von Methoden
@end
Klassendefinition @interface: Instanzvariablen, Methoden
@interface SomeObject : NSObject {
@private // Sichtbarkeit: @private, @protected, @public
NSString* somePrivateIvar;
int someOtherPrivateIvar;
}
// "+": Statische Klassenmethoden (v.a. Factory-Methoden / Convenience Konstruktoren)
+ (id) someObjectWithString: (NSString *) aString;
// "-": Instanzmethoden
- (id) initWithString: (NSString *) aString;
- (NSString*) someMessageWithValue: (id) aValue otherValue: (int) anotherValue;
@end
Implementierung @implementation: Initializer
#import "SomeObject.h"
@implementation SomeObject
- (id) initWithString: (NSString *) aString {
// Initializer der Superklasse aufrufen ([super init] liefert nil im Fehlerfall)
if (self = [super init]) {
// Objekt initialisieren
somePrivateIvar = @"Some String";
}
return self;
}
+ (id) someObjectWithString: (NSString *) aString {
return [[[SomeObject alloc] initWithString: aString] autorelease];
}
// ...
Implementierung @implementation: Methoden
// ...
- (NSString*) someMessageWithValue: (id) aValue otherValue: (int) anotherValue {
return [NSString stringWithFormat:@"this: %@ and that: %i", aValue, anotherValue];
}
@end
Best Practice: Repository-Klassen
- Datenzugriff ist in vielen Anwendungen eine selbstständige, komplexe Teilaufgabe und sollte nicht mit anderer Logik vermischt werden (
Separation of Concerns) - Zugriffslogik wird häufig mehrfach benötigt und ist gut abstrahierbar (
DRY: Don't repeat yourself) - Best Practice: Datenzugriffsmethoden in einer
Repository / Data Access Object (DAO)-Klasse abstrahieren
Xcode: Tastenkürzel
-
Hilfe: Rechtsklick >
Find Text in DocumentationundQuick Help(Alt + Doppelklick) -
Auto-Vervollständigung (
Code Sense Complete List):F5 -
Wechsel zwischen Header und Implementierung:
Cmd + Alt + ↑ -
Vorwärts / Zurück in der Dokumentenhistorie:
Cmd + Alt + ← / → -
Zur Definition springen:
Rechtsklick > Jump to Definition(Cmd + Doppelklick) -
Zwischen Platzhaltern springen (Jump to next placeholder):
Tab
Xcode: Tastenkürzel umkonfigurieren
-
Tastenkürzel können unter
Xcode > Preferences > Key Bindingskonfiguriert werden, empfehlenswert für:Text Key Bindings > Code Sense Complete ListMenu Key Bindings > Help > Find Documentation for Selected TextMenu Key Bindings > Edit > Find > Jump to DefinitionEdit > Insert Text Macro > C > Comment Selection
Weitere Informationen
- The Objective-C 2.0 Programming Language: PDF


Nach den Cocoa-Konventionen sollte dein Convenience-Konstruktor +someObjectWithString: ein autoreleastes Objekt zurückgeben.