2012-05-01 19 views
5

Warum erfordert das Umwandeln eines CGImageRef in einen Objektzeiger keine Speicherverwaltungsinformationen (__bridge usw.)? Zum Beispiel, wenn Bild ist vom Typ UIImage * und Schicht ist ein darunter liegende Schicht des UIView, dann ist die folgende Codezeile entlocken keine Beschwerden vom Compiler:Warum benötigt dieser Cast keine Brückenbildung unter ARC?

layer.content = (id)[image CGImage]; 

Antwort

6

zu zitieren Transitioning to ARC Release Notes:

Der Compiler Griffe CF Von Cocoa Methoden zurückgegebenen Objekte

Der Compiler Objective-C-Methoden versteht, die Core Foundation Rückkehr -Typen folgen den historischen Cocoa-Namenskonventionen (see Advanced Memory Management Programming Guide). Zum Beispiel weiß der Compiler , dass in iOS die CGColor, die von der CGColor-Methode von UIColor zurückgegeben wird, nicht im Besitz ist. Sie müssen noch eine geeignete Typumwandlung verwenden, dargestellt als durch dieses Beispiel ...

(OK, nicht ganz Kakao-Note, aber hey!).

Da CGImage ein CoreFoundation-Objekt zurückgibt, ist eine __bridge Umwandlung nicht erforderlich.

+1

Eine größere Firma hat mich einmal gebeten, ihrem mobilen "Cocoa only" -Team beizutreten ... Es scheint, als würde sich niemand wirklich für die Unterschiede zwischen Kakao und Kakao interessieren und einfach alles Cocoa nennen (sogar ObjC), Es ist eine Schande, dass dies anscheinend auch bei Apple passiert. – JustSid

+0

Also wenn ich richtig verstehe, behandelt ARC nicht CF-Objekte mit Ausnahme derjenigen, die von einer Cocoa-Methode zurückgegeben werden? – Inept

+1

@JustSid * i * care =) – justin

Verwandte Themen