Vorwort zur dritten Auflage | 5 |
Übersicht | 9 |
Inhaltsverzeichnis | 10 |
1 Einführung | 19 |
Die Sprache und das Framework | 20 |
Objective- … | 20 |
Nachrichten | 22 |
Objekte | 22 |
Klassen und Klassenobjekte | 24 |
Ableitung und Vererbung | 28 |
Überschreiben und Polymorphie | 29 |
Erweiterung oder Spezialisierung | 31 |
Delegieren: alternative Spezialisierungen | 33 |
… C … | 34 |
… und Cocoa | 36 |
Cocoa als Library | 37 |
Cocoa als Umgebung | 37 |
Xcode Developer-Tools | 38 |
Installation der Developer-Tools | 38 |
Xcode Integrated Developer Envirement | 38 |
Compiler, Linker und Build | 39 |
Debugger | 45 |
Zusammenfassung und Ausblick | 45 |
2 Umrechner – Die erste Applikation | 47 |
Xcode und das Projekt | 48 |
Projekt anlegen | 49 |
Die Bereiche des Projektfensters | 52 |
Die Symbolleiste | 53 |
Die Navigatoren | 55 |
Der Projektnavigator | 55 |
Symbolnavigator | 59 |
Search-Navigator | 60 |
Sonstige | 61 |
Xib-Editor: das User-Interface | 61 |
Die Objektliste | 62 |
Placeholder | 63 |
Objects | 64 |
Die Library im Interface Builder | 65 |
Der Inspector für die Einstellungen | 68 |
Outlets, Actions und Targets | 71 |
Der Button als Anfang allen Übels | 71 |
Die Klasse Controller, … | 73 |
… und das Instanzobjekt | 77 |
Outlets: Verbindungen zum User-Interface | 79 |
Outlet graphisch erzeugen | 81 |
Outlet selbst programmieren | 84 |
Letztes Textfeld | 88 |
Outlets kontrollieren | 88 |
Action-Target: Verbindungen vom User-Interface | 89 |
Manuell: Action schreiben und Target setzen | 89 |
Automatisch Methode erzeugen lassen und setzen | 92 |
Action kontrollieren | 93 |
Konsole | 93 |
Source-Editor: erste Schritte des Programmierens | 95 |
Nachrichten – Wir beginnen zu sprechen | 95 |
Variablen und Returnwerte – Fragen und Antworten | 97 |
Dokumentation und Quick-Help | 99 |
Vollständige Dokumentation | 99 |
Kurzdokumentation | 101 |
Fehleranzeige | 103 |
Lesen – Denken – Schreiben | 104 |
Der Debugger | 106 |
Breakpoints | 106 |
Angezeigte Informationen | 107 |
Editor | 107 |
Debugger | 108 |
Navigationsleiste | 109 |
Durchlaufen | 110 |
Das letzte Drittel: Das Model | 111 |
Amin’s next top model: äußere Ansichten … | 111 |
… und innere Werte | 118 |
Modelbeschreibung und -editor | 119 |
Verbindungen schaffen | 122 |
Zusammenfassung und Ausblick | 137 |
3 Objective-C | 139 |
Kleinkram | 143 |
Typen | 143 |
Einfache Datentypen | 144 |
Strukturen | 145 |
C-Arrays | 150 |
Zeiger | 151 |
Objektvariablen | 155 |
Objektarten | 161 |
Klassen- und Instanzobjekte | 161 |
Entitäten und Container | 162 |
Swinger-Club für Objekte – Attribute und Beziehungen | 162 |
Mathematische Operationen | 165 |
Kontrollstrukturen | 167 |
Verzweigungen | 168 |
Schleifen | 171 |
Bedingungen | 176 |
Ausführungseinheiten | 179 |
Blöcke | 179 |
Funktionen | 180 |
Methoden | 184 |
Closures (Objective-C-Blocks) | 188 |
Konzept | 188 |
Syntax im Einzelnen | 193 |
Praktische Anwendung in Cocoa | 196 |
Klasse | 196 |
Interface (Beschreibung) | 197 |
Die Klasse und ihre Basisklasse | 198 |
Instanzvariablen | 200 |
Eigenschaften (Declared-Propertys) | 200 |
Methodenliste | 205 |
Class-Continuation | 206 |
Möglichkeiten | 207 |
Zweck | 207 |
Implementierung (Funktionalität) | 209 |
Eigenschaften | 210 |
Weitere Methoden | 211 |
Verwendung | 212 |
Erzeugung einer Instanz | 212 |
Benutzen der Instanz | 214 |
Instanzvariablen | 215 |
copy und strong (und weak) | 217 |
Eine Subklasse als Spezialisierung | 223 |
Eine Subklasse als Erweiterung | 227 |
Kategorien | 233 |
Erweiterung | 234 |
Strukturierung | 237 |
Kapselung | 238 |
Informelle Protokolle | 238 |
Protokolle | 238 |
Definition | 239 |
Übernahme in Klassen | 240 |
Verwendung | 242 |
Required-Methoden | 242 |
Optional-Methoden | 242 |
Protokolltypisierung | 244 |
Protokollabfrage | 246 |
Zusammenfassung | 247 |
4 Foundation | 249 |
Objekterzeugung | 250 |
Allokation | 250 |
Initialisierung | 251 |
Designated-Initializer | 251 |
Secondary-Initializer | 256 |
Ererbte Initialisierer | 257 |
Zusammenfassung | 262 |
Initialisierung von Klassenobjekten | 262 |
Convenience-Allocators und +new… | 263 |
Kopien: Objektorientiertes Plagiieren | 269 |
Kopien, Identität, Dasselbe, Das Gleiche | 269 |
Implementierung | 272 |
Convenience-Copy | 279 |
Gleichheit | 279 |
Zusammenfassung | 281 |
Speicherverwaltung | 281 |
Das Konzept anhand von Automatic Reference Counting | 282 |
Vernetztes Denken | 283 |
Anker | 288 |
Löschwelle | 294 |
Weak – Zyklen und der Softie unter den Settern | 295 |
Autorelease-Pools und die Rückgabe von Objekten | 305 |
Zusammenfassung | 318 |
Manuelle Speicherverwaltung | 319 |
Grundregel | 319 |
Lokale Variablen | 319 |
Accessoren und Instanzvariablen | 323 |
Rückgabe | 325 |
Objektvernichtung | 327 |
Zusammenfassung | 327 |
Automatische vs. Manuelle Speicherverwaltung | 327 |
Container | 328 |
Arten von Containern | 329 |
Skalare Container | 331 |
Formatter | 333 |
Werte | 335 |
Zahlen | 336 |
Dezimalbrüche | 337 |
Zeichenketten | 343 |
Date und Calendar | 349 |
Binäre Daten | 350 |
Collections | 350 |
Elemente und Speicherverwaltung | 351 |
Erzeugung | 354 |
Keine Collection, leere Collection und leeres Element | 355 |
Abzählung | 356 |
Sets | 359 |
Counted-Sets | 360 |
Ordered-Sets | 361 |
Arrays | 361 |
NSDictionary | 363 |
Property Lists | 365 |
Struktur | 366 |
Umwandlung von Entitäten in Property-Lists | 367 |
XML-Property-Lists | 368 |
Zusammenfassung | 369 |
5 Die Viewschicht | 371 |
Grundlagen | 372 |
Responder als Basisklasse | 372 |
Fenster | 374 |
Views | 374 |
Die Aufgabenteilung zwischen Fenstern und Views | 374 |
Views und Cells | 380 |
Nib-Files | 384 |
Menüs | 387 |
Fenster | 389 |
Wichtige Eigenschaften | 390 |
Delegate | 393 |
Sheets | 396 |
Synchrone Alerts | 397 |
Asynchrone Alerts | 398 |
Synchrone, applikationsmodale Fenster | 400 |
Asynchrone, fensterlokale Sheets | 404 |
Drawers | 407 |
Toolbars | 408 |
Toolbar-Struktur | 408 |
Eigene Toolbar erstellen | 411 |
Views und Controls | 416 |
Wichtige Eigenschaften | 416 |
Autolayout | 419 |
Constraints | 421 |
Ungleichungssystem | 423 |
Nutzung aus dem Code | 425 |
Buttons | 426 |
Aktionsbuttons | 427 |
Umschaltbuttons | 427 |
Imageviews | 429 |
Boxen | 430 |
Tabviews | 430 |
Splitviews | 433 |
Progressindicator | 434 |
Textfelder | 439 |
Pop-up-Buttons | 440 |
Scrollviews | 442 |
Tableviews | 444 |
Struktur | 444 |
Content-Mode | 445 |
Data-Source | 447 |
Sourceview | 447 |
Selection | 449 |
Outlineviews | 449 |
Weitere Views und Eigenschaften | 449 |
Animation | 450 |
Zusammenfassung | 453 |
6 Die Controllerschicht | 455 |
Bindings-Controller, KVC, KVV und KVO | 456 |
Grundlagen | 456 |
Key und Key-Path | 456 |
Key-Value-Coding | 458 |
Key-Value-Validation | 458 |
Key-Value-Observation | 458 |
Cocoa-Bindings (Key-Value-Bindings) | 459 |
Key-Value-Coding | 460 |
Funktionsweise | 461 |
Einfache Accessoren (Getter und Setter) | 463 |
Ungeordnete To-many-Relationships (Sets) | 465 |
Geordnete To-many-Relationships (Arrays, Ordered-Sets) | 471 |
Zusammenfassung: | 472 |
Fehlermethoden | 472 |
Key-Value-Validation | 473 |
Key-Value-Observing | 474 |
Bindings | 476 |
Bindbare Eigenschaften | 476 |
Bindings-Optionen | 479 |
Value-Transformer | 480 |
Der Arraycontroller | 481 |
Einstellungen im Attributes-Inspector | 481 |
Observierbare Eigenschaften | 483 |
Der Tree-Controller | 486 |
Der Dictionary-Controller | 487 |
Der Defaults-Controller und Voreinstellungen | 489 |
Defaultssystem | 489 |
Registrationdefaults und Application-Delegate | 491 |
Komplexe Bindings | 497 |
Bindingsketten | 497 |
Selektions-Bindings | 503 |
Windowcontroller und Viewcontroller | 508 |
Aufgabe und Stellung | 508 |
Fenstertyp | 511 |
Dokumentenwindowcontroller | 513 |
Der eigene Windowcontroller | 513 |
Document-Bindings | 515 |
Outlets | 517 |
Actions und First Responder | 517 |
Infowindowcontroller | 520 |
Inspector-Windowcontroller | 529 |
Erstellen | 530 |
Synchronisation | 533 |
Viewcontroller | 538 |
Notifications | 539 |
Lokale Notifications | 540 |
Notification definieren | 541 |
Notification auslösen | 543 |
Notification fangen | 544 |
Als Observer anmelden | 545 |
Notifications und Delegating | 547 |
Distributed-Notifications | 548 |
Data-Sources | 550 |
Bindings einreißen und Data-Source vorbereiten | 550 |
Die Urgründe | 552 |
Manuelle Synchronisation der Auswahl | 557 |
Personen zum Outlineview hinzufügen | 560 |
Gruppen und ihre Elemente | 563 |
Ansichten tauschen | 565 |
Manuelle Synchronisation der Attribute | 577 |
Key-Loop | 578 |
Drag-and-drop-Controller, Pasteboards | 579 |
Dragging | 580 |
Dropping | 582 |
Zusammenfassung | 586 |
7 Die Modelschicht | 587 |
Grundlagen | 588 |
Inhalt | 588 |
Informationen | 588 |
Fähigkeiten | 590 |
Modellierung | 591 |
Problemstellung | 591 |
Modellierungsregeln | 593 |
Dokumente eigener Klassen | 599 |
Modellimplementierung | 600 |
Anbindung | 601 |
Laden und Speichern | 602 |
Methodensatz | 603 |
Serialisierung mit Codern | 603 |
Serialisieren | 605 |
Deserialisierung | 612 |
Handwerksregeln | 613 |
Undo | 614 |
Undo-Manager | 614 |
Undo-Stack | 615 |
Undo implementieren | 619 |
Undo deaktivieren | 624 |
Handwerksregeln | 625 |
Core Data | 625 |
Grundlagen | 626 |
Aufgabe von Core Data | 626 |
Was ist Core Data? | 626 |
Aufbau | 629 |
Modelbeschreibung | 632 |
Entitätsbeschreibung | 633 |
Eigenschaftsbeschreibungen | 634 |
Klassen und Entitäten | 641 |
Instanzverwaltung | 642 |
Objekt-ID | 642 |
Instanzerzeugung | 643 |
Speicherverwaltung | 645 |
Instanzvernichtung | 645 |
Abweichungen zwischen Store und Kontext | 647 |
Anpassung | 647 |
Accessoren | 648 |
Klasseneigenschaften | 653 |
Eigene Attributtypen | 656 |
Fetch-Requests | 660 |
Prädikate | 663 |
Eigenschaft (Key) | 664 |
Wert | 664 |
Operator | 665 |
To-many-Beziehungen und Aggregate | 666 |
Prädikaterzeugung | 667 |
Sortierung | 668 |
Möglichkeiten der Sortierung | 668 |
Sort-Deskriptoren | 668 |
Reihenfolgeeigenschaft im Model | 669 |
Reihenfolgeeigenschaft per Drag-and-Drop und die Objekt-ID | 675 |
Applikationsmodelle | 683 |
Zugriff | 683 |
Ohne Core-Data-Support | 683 |
Im Code | 684 |
Im Nib | 685 |
Mit Core-Data-Support | 685 |
Undo-Management | 685 |
Laden und Speichern | 686 |
Versions und Autosave | 687 |
Zusammenfassung | 687 |
8 Xcode & Co | 689 |
Workspace, Projekt und Target | 690 |
Übersicht | 690 |
Workspaces | 690 |
Workspace erzeugen | 691 |
Projekte erzeugen | 691 |
Mit Workspace arbeiten | 692 |
Projekt | 695 |
Target | 695 |
Schemes | 696 |
Configurations | 697 |
Projektdateien | 697 |
Datei hinzufügen | 697 |
Dateien finden | 700 |
Target | 701 |
Summary | 702 |
Info | 703 |
Build-Settings | 706 |
Build-Phasen | 707 |
Lokalisierung | 709 |
Ressourcen und Lokalisierung | 710 |
Lokalisierte Dateien | 710 |
Auswahl der Lokalisierung | 711 |
Lokalisierung hinzufügen | 711 |
Lokalisierung im Code | 715 |
Das »Über«-Fenster | 717 |
Texteditor und Code-Generierung | 718 |
Texteditor und Preferences | 718 |
Textvervollständigung | 718 |
Code-Folding | 719 |
Navigation | 720 |
Kodierung | 720 |
Bezeichnernutzung | 721 |
Einrückung | 721 |
Key Bindings | 721 |
Code-Generierung | 721 |
Core-Data | 722 |
Interface Builder | 722 |
Refaktorierung | 722 |
Umbenennen | 722 |
Auslagern | 723 |
Klassenhierarchie | 724 |
Konvertierung zu ARC | 725 |
Codeanalyse | 725 |
Die erste eigene Applikation | 726 |
Leistungsumfang | 726 |
Arbeitsabläufe | 727 |
User-Interface | 727 |
Model | 727 |
Controller aufbauen | 728 |
Testen und Fehlersuche | 728 |
Anwendung publizieren | 728 |
Archive-Build | 729 |
Archive | 729 |
Zusammenfassung | 729 |
Index | 731 |