Einführung in Objective C

Objective-C ist ein um objektorientierte Sprachkonstrukte erweiterter C-Dialekt.

Typen (Auszug)

Klassen deklarieren

Eine Klasse wird in Objective-C mittels @interface ... @end in einer Header-.h-Datei deklariert, z.B. MyClass.h:

@interface MyClass : NSObject {
    // Deklaration von Instanzvariablen
}

// Deklaration von Methoden

@end

Die Implementierung erfolgt mittels @implementation ... @end in MyClass.m:

#import "MyClass.h"

@implementation MyClass

// Implementierung von Methoden

@end

Methoden deklarieren

Der Name einer Methode setzt sich in Objective C aus den Namen der Parameter zusammen. Im folgenden werden drei Methoden zero, increment: und addNumber1:number2: deklariert:

MyClass.h:

@interface MyClass : NSObject {
}

- (int) zero;
- (int) increment:(int)value;
- (int) addNumber1:(int)a number2:(int)b;

@end

MyClass.m:

#import "MyClass.h"

@implementation MyClass

- (int) zero {
    return 0;
}

- (int) increment:(int)value {
    return value + 1;
}

- (int) addNumber1:(int)a number2:(int)b {
    return a + b;
}

@end

Im Vergleich zu Java:

Methodenaufrufe

int value1 = [obj zero];
int value2 = [obj increment:5];
int value3 = [obj addNumber1:5 number2:3];

Im Vergleich zu Java:

Konstruktoren

MyClass.h:

@interface MyClass : NSObject {

// Sichtbarkeiten: @private, @protected, @public
@private
    NSString* somePrivateIvar;
    int someOtherPrivateIvar;
}

// "+": Statische Klassenmethoden (v.a. Factory-Methoden / Convenience Konstruktoren)
+ (id) MyClassWithString: (NSString *) aString;

// "-": Instanzmethoden
- (id) initWithString: (NSString *) aString;

@end

MyClass.m:

#import "MyClass.h"

@implementation MyClass

- (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) MyClassWithString: (NSString *) aString {
    return [[[MyClass alloc] initWithString: aString] autorelease];
}

@end

Strings

// "..." 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", MyClass, helloObjC, 5);
NSLog(@"%@", [MyClass description]);

Weitere Informationen

Ralf Ebert

Ralf Ebert is an independent software developer, technical writer and trainer. He makes apps for Mac OS X and iOS and builds software solutions for companies using Eclipse RCP and Ruby on Rails. He offers training courses for software developers and writes books and articles about software development.