Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort
Vorwort
1 Hello iPhone
2 Grundlagen
3 Views und Viewcontroller
4 Alles unter Kontrolle
5 Daten, Tabellen und Controller
6 Models, Layer, Animationen
7 Programmieren, aber sicher
8 Datenserialisierung und Internetzugriff
9 Jahrmarkt der Nützlichkeiten
A Sicherer Entwicklungszyklus
Stichwort

Download:
- ZIP, ca. 49,9 MB
Buch bestellen
Ihre Meinung?

Spacer
Apps programmieren für iPhone und iPad von Klaus M. Rodewig, Clemens Wagner
Das umfassende Handbuch
Buch: Apps programmieren für iPhone und iPad

Apps programmieren für iPhone und iPad
Galileo Computing
1000 S., geb., mit DVD
39,90 Euro, ISBN 978-3-8362-1915-0
Pfeil 6 Models, Layer, Animationen
Pfeil 6.1 Modell und Controller
Pfeil 6.1.1 iOS Next Topmodel
Pfeil 6.1.2 View an Controller
Pfeil 6.1.3 Modell an Controller
Pfeil 6.1.4 Undo und Redo
Pfeil 6.1.5 Unit-Tests
Pfeil 6.2 Als die Views das Laufen lernten
Pfeil 6.2.1 Animationen mit Blöcken
Pfeil 6.2.2 Transitionen
Pfeil 6.2.3 Zur Animation? Bitte jeder nur einen Block!
Pfeil 6.3 Core Animation
Pfeil 6.3.1 Layer
Pfeil 6.3.2 Vordefinierte Layer-Klassen
Pfeil 6.3.3 Unser Button soll schöner werden
Pfeil 6.3.4 Spieglein, Spieglein an der Wand
Pfeil 6.3.5 Der bewegte Layer
Pfeil 6.3.6 Daumenkino
Pfeil 6.3.7 Relativitätstheorie
Pfeil 6.3.8 Der View, der Layer, seine Animation und ihr Liebhaber
Pfeil 6.3.9 Die 3. Dimension
Pfeil 6.4 Scrollviews und gekachelte Layer
Pfeil 6.4.1 Scrollen und Zoomen
Pfeil 6.4.2 Die Eventverarbeitung
Pfeil 6.4.3 Scharfe Kurven
Pfeil 6.4.4 Ganz großes Kino
Pfeil 6.4.5 PDF-Dateien anzeigen
Pfeil 6.5 Über diese Brücke musst du gehen
Pfeil 6.5.1 Toll-Free Bridging und ARC
Pfeil 6.5.2 C-Frameworks und ARC
Pfeil 6.6 Was Sie schon immer über Instruments wissen wollten, aber nie zu fragen wagten
Pfeil 6.6.1 Spiel mir das Lied vom Leak
Pfeil 6.6.2 Ich folgte einem Zombie
Pfeil 6.6.3 Time Bandits

Galileo Computing - Zum Seitenanfang

6.5 Über diese Brücke musst du gehenZur nächsten Überschrift

Icon

Core Foundation ist ein C-Framework, das die Grundlage für das Foundation-Framework bildet. Es stellt allerdings Funktionen und keine Objective-C-Klassen bereit, und so müssen Sie die Parameter und Rückgabewerte gegebenenfalls von den Klassen auf die entsprechenden Datentypen übertragen. Das ist jedoch glücklicherweise in den meisten Fällen nicht sehr schwer, da Apple hierfür einen speziellen Mechanismus – die Toll-Free Bridge – bereitstellt, der Klassen auf Datentypen und umgekehrt abbildet. Die Toll-Free Bridge funktioniert allerdings nur mit Datentypen und den zugehörigen Klassen von Apple; Sie können diesen Mechanismus leider nicht auf andere Klassen und Datentypen ausdehnen. [Zumindest nicht, wenn Sie Ihre App durch den Review-Prozess in den App-Store bekommen möchten.]

Beim manuellen Referenzenzählen besteht die Brücke einfach aus einem Cast. Sie können also beispielsweise ein Objekt der Klasse NSString auf eine Referenz des Typs CFStringRef und umgekehrt abbilden:

CFStringRef theReference = (CFStringRef)theString;
NSString *theValue = (NSString *)theReference;

Listing 6.93 Toll-Free Bridge


Galileo Computing - Zum Seitenanfang

6.5.1 Toll-Free Bridging und ARCZur nächsten ÜberschriftZur vorigen Überschrift

Beim automatischen Referenzenzählen müssen Sie dem Compiler hingegen noch einen zusätzlich Hinweis für die Speicherverwaltung geben. In Core Foundation erfolgt die Speicherverwaltung ja nach wie vor explizit durch Aufrufe der Funktionen CFRetain und CFRelease, und deshalb müssen Sie dem Compiler mitteilen, wie Sie das Core-Foundation-Objekt verwalten möchten.

Im einfachsten Fall wollen Sie die Eigentümerschaft nicht übertragen, und die Speicherverwaltung bleibt beim Ursprungsobjekt. Dafür nehmen Sie das Schlüsselwort __bridge in den Cast mit auf.

CFStringRef *theReference = CFStringCreateCopy(...);
NSString *theString = (__bridge NSString *)theReference;
...
CFRelease(theReference);

Listing 6.94 Cast ohne Übertragung der Eigentümerschaft

Listing 6.94 überträgt die Core-Foundation-Referenz theReference ohne die Eigentümerschaft auf eine Referenz von NSString. Dadurch erzeugt der ARC-Compiler keinen Code, um die Zeichenkette, auf die theString verweist, freizugeben. Damit kein Speicherleck entsteht, müssen Sie also die Core-Foundation-Referenz durch CFRelease freigeben. Auch bei dem umgekehrten Cast in Listing 6.95 überträgt der ARC-Compiler nicht die Eigentümerschaft. Dadurch sorgt er für die Freigabe der Zeichenkette, auf die theString verweist. Ein Aufruf von CFRelease für theReference würde bei diesem Beispiel wahrscheinlich zu einem Speicherzugriffsfehler führen.

NSString *theString = ...;
CFStringRef theReference = (__bridge CFStringRef)theString;

Listing 6.95 Umgekehrter Cast ohne Übertragung der Eigentümerschaft

Listing 6.56 enthält einen solchen Cast: (__bridge CFURLRef)theURL Hier soll die Verwaltung der Eigentümerschaft von theURL beim ARC-Compiler bleiben, da sie ja die Funktion CGImageSourceCreateWithURL nicht übernimmt. Die Funktion CGImageSourceCreateImageAtIndex liefert hingegen ein Core-Graphics-Bild zurück, dessen Eigentümer die Methode ist. Sie muss nun das Bild in das Array einfügen und dabei die Eigentümerschaft abgeben. Das können Sie über das Schlüsselwort __bridge_transfer erreichen. Der Cast (__bridge_transfer id)theImage wandelt das Bild in ein Objekt um und teilt dem ARC-Compiler mit, dass er die Verwaltung der Eigentümerschaft übernehmen soll.

Der Modifizierer __bridge_retained dient für den entgegengesetzten Fall, wenn Sie ein Objekt in ein Core-Foundation-Objekt umwandeln und der ARC-Compiler die Verwaltung der Eigentümerschaft dabei abgeben soll. Dieser Fall tritt beispielsweise bei Erzeugungs- und Kopierfunktionen auf:

CFStringRef CreateStringWithInteger(NSInteger inValue) {
NSString *theValue = Zeilenumbruch
[[NSString alloc] initWithFormat:@"%d", inValue];

return (__bridge_retained CFStringRef)theValue;
}

Listing 6.96 Übergabe der Eigentümerschaft an Core Foundation

Durch das __bridge_retained erzeugt der ARC-Compiler nicht den Code für die Freigabe der Zeichenkette, auf die theValue verweist, und somit hält der Aufrufer der Funktion CreateStringWithInteger die Zeichenkette.

Sie können auch anders

Sie können statt __bridge_retained auch die Funktion CFBridgingRetain verwenden und den Cast in Listing 6.96 als (CFStringRef)CFBridgingRetain(theValue) schreiben. Auch für __bridge_transfer gibt es mit der Funktion CFBridgingRelease eine Alternative. Sie können den Cast beim Einfügen in das Array in Listing 6.56 also auch als CFBridgingRelease(theImage) schreiben.


Galileo Computing - Zum Seitenanfang

6.5.2 C-Frameworks und ARCZur vorigen Überschrift

Das Toll-Free Bridging funktioniert sogar, wenn es für einen Typ keine entsprechende Klasse gibt oder umgekehrt. Dieser Fall tritt auch schon in Listing 6.56 auf; der Cast (__bridge_transfer id)theImage funktioniert, obwohl es keine Klasse (inklusive UIImage) in Cocoa Touch gibt, die dem Datentyp CGImage entspricht.

Dass der Cast dennoch funktioniert, liegt daran, dass auch viele Datentypen in den C-Frameworks sich in einer Typhierarchie mit einer gemeinsamen Menge von Funktionen befinden. Diese gemeinsamen Funktionen bilden dabei genau die Methoden ab, die eine Objective-C-Klasse implementieren muss, die das Protokoll NSObject implementiert.

Das bedeutet, dass Sie sowohl alle Referenzen aus Core Foundation als auch aus den anderen C-Frameworks (wie Core Graphics, ImageIO, Address Book und andere) zumindest wie Referenzen auf NSObject behandeln können. Beim manuellen Referenzenzählen entspricht also beispielsweise die Anweisung CFRetain(theImage) der Anweisung [(id)theImage retain]. Diese transparente Abbildung der C-Datentypen auf Objective-C-Klassen hat nun auch den schönen Nebeneffekt, dass Sie, wie in Listing 6.56 gezeigt, Core-Graphics-Objekte in einem Foundation-Array sammeln können.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.







<< zurück
  Zum Katalog
Zum Katalog: Apps programmieren für iPhone und iPad

Apps programmieren für iPhone und iPad
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Einstieg in Objective-C 2.0 und Cocoa





 Einstieg in
 Objective-C 2.0
 und Cocoa


Zum Katalog: Apps entwickeln für iPhone und iPad - Videotraining






 Apps entwickeln für
 iPhone und iPad -
 Videotraining


Zum Katalog: Apps mit HTML5 und CSS3






 Apps mit HTML5
 und CSS3


Zum Katalog: iPhone- und iPad-Apps entwickeln






 iPhone- und
 iPad-Apps entwickeln


Zum Katalog: Android 4






 Android 4


Zum Katalog: Android-Apps entwickeln - Videotraining






 Android-Apps
 entwickeln -
 Videotraining


Zum Katalog: Windows Store Apps mit XAML und C#






 Windows Store Apps
 mit XAML und C#


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Galileo Press 2013
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de