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++.