mac os x programmierung
TRANSCRIPT
![Page 1: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/1.jpg)
Mac OS X ProgrammierungEine Einführung in Cocoa, Objective-C und Xcode
Christina ZeehMac User Group Stuttgart
17.08.2004
![Page 2: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/2.jpg)
2
Überblick• Erster Teil
• Softwareentwicklung für Mac OS X - ein Überblick• Objektorientierung in 10 Minuten• Cocoa - noch ein Überblick• Objective-C für Cocoa
• Pause• Zweiter Teil
• Xcode• Interface Builder• Cocoa Konzepte
• Dritter Teil: Pizza :-)
![Page 3: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/3.jpg)
3
Mac OS X Architektur
Application Environments
Application Services
Core Services
Core OS
Carbon Cocoa Java BSD
Core OS
![Page 4: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/4.jpg)
4
Die Qual der Wahl• Cocoa
• Anwendungsentwicklung für Mac OS X• Optimale Einbindung in die Mac OS X Umgebung
• Carbon• Portierung von Mac OS 9 Anwendungen• Portierung von Anwendungen in prozeduralen
Programmiersprachen• Java
• Plattformunabhängige Anwendungsentwicklung• BSD, X11, QT, ...
![Page 5: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/5.jpg)
5
• Entwicklertools für Mac OS X• Neueste Version (1.5) auf http://connect.apple.com
(kostenlose ADC Online-Mitgliedschaft)• Wichtige Komponenten:
• Xcode (IDE)• Interface Builder (GUI Entwicklung)• Compiler (gcc)• CHUD Tools (Performance, Debugging)• weitere Tools (Hilfe-Index, Icons, Packages, ...)
Xcode Tools
![Page 6: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/6.jpg)
Objektorientierung
![Page 7: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/7.jpg)
7
Objekte• Objekte sind Einheiten aus
• Daten (Instanzvariablen) und• Funktionalität
• Daten und Funktionalität eines Objektes können nur über eine definierte Schnittstelle (Methoden) genutzt werden
• Der Nutzer eines Objekts muss nur die Schnittstelle, nicht die Implementierung kennen
• Instanzvariablen können Zeiger auf andere Objekte sein• Objekte kommunizieren untereinander über
Botschaften (Methodenaufrufe)
![Page 8: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/8.jpg)
8
Klassen• Eine Klasse ist ein Bauplan für Objekte gleicher Art
• Liste der Instanzvariablen• Methodendefintion (Schnittstelle)• Methodenimplementierung (Funktionalität)
• Objekte sind konkrete Instanzen einer Klasse, sie benötigen für die Werte der Instanzvariablen Speicherplatz
• In Objective-C sind Klassen wiederum Objekte, ihre Funktionalität besteht vor allem darin, Instanzen entsprechend ihrem Bauplan erzeugen zu können
![Page 9: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/9.jpg)
9
Vererbung• Erstellung einer neuen Klasse basierend auf einer
bestehenden Klasse• Instanzvariablen hinzufügen• Methoden hinzufügen• Methoden verändern (selber Name, andere
Implementierung)• Alle Instanzvariablen und nicht veränderten Methoden
werden aus der Oberklasse übernommen (geerbt)• Polymorphismus erlaubt den Aufruf von Methoden
ohne die konkrete Klasse des Empfängers zu kennen
![Page 10: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/10.jpg)
10
Vorteile
• Natürlichere Abbildung der Realität• Einfachere Wartung• Vermeiden von Fehlern• Einfachere Wiederverwendung von
Programmteilen
![Page 11: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/11.jpg)
Cocoa
![Page 12: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/12.jpg)
12
Python
Cocoa
Application Kit
Framework
Foundation
Framework
Cocoa
Java Objective-C
![Page 13: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/13.jpg)
Objective-Cfür Cocoa
![Page 14: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/14.jpg)
14
Objective-C• Hintergrund: NeXTstep, OpenStep, Mac OS X• C erweitert um Objektorientierung
• Definition von Klassen• Instanziierung von Objekten dieser Klassen• Senden von Botschaften an Objekte
• Syntax der objektorientierten Erweiterungen ähnelt Smalltalk
• Objective-C Schlüsselwörter beginnen mit @
![Page 15: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/15.jpg)
15
Objective-C Klassen
• Programmcode für eine Klasse besteht aus• Schnittstellendefinition: @interface• Implementierung: @implementation
• Üblicherweise auf zwei Dateien aufgeteilt • Schnittstellendefinition: Klassenname.h• Implementierung: Klassenname.m
![Page 16: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/16.jpg)
16
Schnittstellendefinition (.h)#import “Oberklasse.h”
@interface Klasse : Oberklasse
{Instanzvariablen
}
+ Klassenmethoden
- Methoden
@end
#import <Cocoa/Cocoa.h>
@interface Point : NSObject
{int x;int y;
}
- init;- initWithX:(int)xValue Y:(int)yValue;- (void)setX:(int)to;- (void)setY:(int)to;- (int)x;- (int)y;- (int)distanceTo:(Point *)p;
@end
![Page 17: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/17.jpg)
17
Implementierung (.m)#import “Klasse.h”
@implementation Klasse
+ Klassenmethoden {
}
- Methoden {
}
@end
#import “Point.h”
@implementation Point
(...)
- (void)setX:(int)to { x = to;}(...)
- (int)x { return x;}(...)
@end
![Page 18: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/18.jpg)
18
Variablen
• Variablendeklaration wie in Cint x;int someNumbers[5]; char name[255];char *description;
• Variablen können Zeiger auf Objekte sein NSString *name;NSArray *members;Point *aPoint;
![Page 19: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/19.jpg)
19
Methoden und Botschaften• Methodendefinition- (Rückgabetyp)Methode:(Parametertyp)Parameter;- (void)setX:(int)to;- initWithX:(int)xValue Y:(int)yValue;
• Definition von Klassenmethoden analog• Botschaften (Methodenaufrufe)[Empfängerobjekt Methode:Parameter];[aPoint setX:10];
• Für Klassenmethoden[Klassenobjekt Methode:Parameter];[SomeClass aClassMethod:someObject];
![Page 20: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/20.jpg)
20
Initialisierung von Objekten• Ein Objekt benötigt Speicherplatz• Klassenmethode alloc reserviert den Speicher• init... initialisiert die Instanzvariablen• Erzeugen einer Instanz aPoint der Klasse Point:aPoint = [[Point alloc] init]; oderaPoint = [[Point alloc] initWithX:10 Y:15];
• Mehrere Initialsierungsmethoden sind möglich ...... eine davon ist der designated initializer, sie wird von den anderen Initialisierungsmethoden verwendet (i.d.R. diejenige mit den meisten Parametern).
![Page 21: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/21.jpg)
21
Designated Initializer
Abgeleitete Klassen müssen den designated initializer aufrufen, hier also initWithX:Y:
- initWithX:(int)xValue Y:(int)yValue { self = [super init]; x = xValue; y = yValue; return self;}
- init { return [self initWithX:0 Y:0];}
- initWithX:(int)xValue Y:(int)yValue Z:(int)zValue { self = [super initWithX:xValue Y:yValue]; z = zValue; return self;}
Nur der designated initializer ruft die Initialisierungsmethode von super auf!
![Page 22: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/22.jpg)
22
Speicherverwaltung
• Der reservierte Speicherplatz muss freigegeben werden, wenn das Objekt nicht mehr benötigt wird: [myObject dealloc];
• Aber: In der OO Programmierung wird ein Objekt oft von mehreren anderen Objekten verwendet
• Problem: Woher weiß man, dass das Objekt von niemandem mehr benötigt wird?
• Lösung: Referenzzähler
![Page 23: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/23.jpg)
23
Referenzzähler• Mit jedem Objekt ist ein Referenzzähler (retain count)
verbunden• Ein mit [[Class alloc] init] instanziiertes Objekt
hat einen retain count von 1• dealloc wird nicht mehr direkt aufgerufen (!!!)• Stattdessen: release (und das Gegenstück retain)
• release vermindert den retain count um 1• retain erhöht den retain count um 1• Ist der retain count 0, wird dealloc automatisch
aufgerufen
![Page 24: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/24.jpg)
24
Regeln
1. Wenn man ein Objekt mittels einer Methode mit alloc oder copy im Namen erhalten hat, muss es mit release freigegeben werden, wenn es nicht mehr benötigt wird.
2. Gleiches gilt, wenn man einem Objekt eine retain-Botschaft geschickt hat.
3. Hat man ein Objekt auf andere Weise erhalten und will man es nach Verlassen der aktuellen Methode weiterverwenden, muss man eine retain-Botschaft schicken.
![Page 25: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/25.jpg)
25
Autorelease• Problem: Erzeugung eines temporären Objektes, um es
an ein anderes Objekt weiterzureichen:- (NSString *)xAsString { NSString *s = [[NSString alloc] initWithFormat:@”%i”,x]; return s;}
• Widerspricht Regel Nr. 1 - unser Objekt ist für release verantwortlich!
• Aber: Kein release möglich, da s deallokiert werden würde, bevor das Empfängerobjekt die Chance zum retain hat
• Lösung: autorelease statt release
![Page 26: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/26.jpg)
26
Regeln v2.0
1. Wenn man ein Objekt mittels einer Methode mit alloc oder copy im Namen erhalten hat, muss es mit release oder autorelease freigegeben werden, wenn es nicht mehr benötigt wird.
2. Gleiches gilt, wenn man einem Objekt eine retain-Botschaft geschickt hat.
3. Hat man ein Objekt auf andere Weise erhalten und will man es nach Verlassen der aktuellen Methode weiterverwenden, muss man eine retain-Botschaft schicken.
![Page 27: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/27.jpg)
Pause :-)
![Page 28: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/28.jpg)
Xcode
![Page 29: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/29.jpg)
29
Xcode• Groups & Files
• Build Products• Targets
• Editor• Entwicklerdokumentation• Compiler
• Run Log• Debugger
![Page 30: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/30.jpg)
Interface Builder
![Page 31: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/31.jpg)
Cocoa Konzepte
![Page 32: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/32.jpg)
32
Model-View-Controller
Document Window
Punkt
Ändern
X-Wert: 7
Y-Wert: 11
Controller
ModelView
schwarzerPunkt
x=7
y=11
schwarzerPunkt
x=7
y=11
schwarzerPunkt
x=7
y=11
![Page 33: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/33.jpg)
33
Target-Action und Outlets
Punkt
Ändern
X-Wert: 7
Y-Wert: 11
Action
OutletsTarget
![Page 34: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/34.jpg)
Hello, World!
![Page 35: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/35.jpg)
35
Vorgehensweise• Neues Projekt “Cocoa Application” anlegen• MainMenu.nib im Interface Builder öffnen• Benutzeroberflächen-Objekte einfügen• MyController Unterklasse von NSObject erstellen• Outlets und Actions definieren• Instanz von MyController erzeugen• Outlets und Actions verbinden• Quellcode-Dateien für MyController Klasse erstellen• Code schreiben
![Page 36: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/36.jpg)
Hello, World!Randomized
![Page 37: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/37.jpg)
Webbrowser
![Page 38: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/38.jpg)
38
Delegation
• Delegation• überlässt die Kontrolle über Teil der Oberfläche• informelles Protokoll
• Data Source • überlässt Kontrolle über Daten
delegateObject
- delegateMethod
![Page 39: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/39.jpg)
39
Noch ein paar Hinweise ...• Development/Deployment Build Style• CVS/SVN Integration• Human Interface Guidelines• Internationalisierung• Hilfe• Preferences• Document-Based Applications• Bindings• Read the source :-)
![Page 40: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/40.jpg)
Weiterführende Informationen
![Page 41: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/41.jpg)
41
Weiterführende Informationen• Apple Developer Connection (ADC)
http://developer.apple.com• CocoaDev Wiki
http://cocoadev.com• StepWise
http://www.stepwise.com/StartingPoint/Cocoa.html• OmniGroup (Frameworks, Mailinglisten)
http://www.omnigroup.com/developer/• MacDevCenter (o’Reilly)
http://www.macdevcenter.com• IRC: #macdev auf irc.freenode.net
![Page 42: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/42.jpg)
42
Literatur• Cocoa Programming for Mac OS X (2nd Edition)
Aaron HillegassISBN 0-321-21314-9
• Cocoa ProgrammingScott Anguish, Erik M. Buck, Donald A. YacktmanISBN 0-672-32230-7
• The C Programming LanguageBrian W. Kernighan, Dennis M. RitchieISBN 0-13-110362-8
• Design PatternsErich Gamma, Richard Helm, Ralph Johnson, John VlissidesISBN 0-201-63361-2
![Page 43: Mac OS X Programmierung](https://reader030.vdokument.com/reader030/viewer/2022020621/61eae25f08eb46118b3fe407/html5/thumbnails/43.jpg)
Fragen