Objective-C ist die Erweiterung von C um objektorientierte Konzepte nach Smalltalk-Vorbild. Bis 2014 war sie die Hauptsprache für iOS- und macOS-Apps — heute lebt sie vor allem in Legacy-Codebasen und als Brücke zu C-Bibliotheken weiter.

Erste Schritte

Objective-C-Dateien heißen .h (Header) bzw. .m (Implementierung). Auf Apple-Systemen übersetzt der Clang-Compiler mit clang -fobjc-arc oder Xcode den Code.

clang -fobjc-arc -framework Foundation hallo.m -o hallo
./hallo

Klassen definieren

// Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property (nonatomic, strong) NSString *name;
- (void)gruss;
@end

// Person.m
#import "Person.h"
@implementation Person
- (void)gruss {
    NSLog(@"Hallo, %@", self.name);
}
@end

Objekte erzeugen und verwenden

Person *p = [[Person alloc] init];
p.name = @"Lübeck";
[p gruss];                 // Hallo, Lübeck

Methodenaufrufe mit eckigen Klammern

Kern der Smalltalk-Syntax: [Empfaenger Nachricht]. Argumente werden mit Doppelpunkt getrennt.

NSString *s = [NSString stringWithFormat:@"%d plus %d", 2, 3];
NSUInteger len = [s length];
NSLog(@"%lu Zeichen", (unsigned long)len);   // 5 Zeichen

Collections: NSArray, NSDictionary, NSSet

NSArray *zahlen = @[@1, @2, @3];
for (NSNumber *n in zahlen) {
    NSLog(@"%@", n);
}
NSDictionary *stadt = @{@"Name": @"Lübeck", @"PLZ": @"23552"};
NSLog(@"%@", stadt[@"Name"]);          // Lübeck

Blöcke (Closures)

void (^verdoppeln)(int) = ^(int n) {
    NSLog(@"%d", n * 2);
};
verdoppeln(21);                        // 42

ARC und Speicherverwaltung

Mit ARC (Automatic Reference Counting) übernimmt der Compiler das retain/release-Management. strong hält das Objekt, weak referenziert ohne Besitz (vermeidet Zyklen bei Delegates).

__weak Person *schwacheRef = p;   // kein Besitz

Praxis-Tipps

  • Für neue Apple-Projekte ist Swift die empfohlene Sprache — Objective-C nur für Wartung und C-Interop.
  • Header (.h) deklarieren, Implementierung (.m) definiert — das trennt API und Details.
  • Methodennamen sind sprechend und selbstdokumentierend (stringWithFormat:, objectAtIndex:).

Verwandte Grundlagen: Swift-Befehle und C und C++.