2012-05-01 20 views
5

¿Por qué el fundir un CGImageRef en un puntero de objeto no requiere información de gestión de memoria (__bridge, etc.)? Por ejemplo, si imagen es de tipo UIImage *, y capa es capa de un UIView subyacente, entonces la siguiente línea de código no provoca ninguna queja de que el compilador:¿por qué este modelo no requiere puente bajo ARC?

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

Respuesta

6

Para citar Transitioning to ARC Release Notes:

El compilador Maneja CF objetos devueltos de los métodos de cacao

El compilador entiende métodos Objective-C que devuelven Core FundaciónLos tipossiguen las convenciones históricas de nomenclatura del cacao (see Advanced Memory Management Programming Guide). Por ejemplo, el compilador sabe que, en iOS, el CGColor devuelto por el método CGColor de UIColor es no propiedad. No obstante, debe utilizar un molde tipo apropiado, como se ilustra con este ejemplo ...

(OK, no del todo cacao toque, pero bueno!).

Dado que CGImage devuelve un objeto CoreFoundation, no se requiere un molde __bridge.

+1

Una empresa más grande una vez me pidió que me uniera a su equipo móvil "Sólo cacao" ... Parece que a nadie le importan las diferencias 'cacao' y' cacao-touch' y simplemente llama a todo Cocoa (incluso a ObjC), Es una lástima que esto aparentemente también ocurra en Apple. – JustSid

+0

Entonces, si entiendo correctamente, ARC no maneja los objetos CF, excepto aquellos que son devueltos por un método Cocoa? – Inept

+1

@JustSid * i * care =) – justin