ios swift cgimage

ios - CGImageRelease en Swift



(2)

En Objc CGImageRelease método CGImageRelease después del tratamiento de una imagen. Pero en Swift este método no está disponible.

En la documentación de Apple después de Retaining and Releasing Images hay 2 Objective-C symbols hidden

Mi pregunta es, ¿por qué no hay más CGImageRelease en Swift? ¿Y tenemos que llamar a otro método para reemplazarlo?

Gracias !


No hay más CGImageRelease en Swift, y no hay otro método para reemplazarlo.

  • Swift usa ARC exclusivamente, por lo que no hay espacio para una llamada a CFRelease o __bridge_retained.
  • Para los tipos devueltos desde las funciones C, podemos llamar a takeRetainedValue () / takeUnretainedValue () para obtener un valor administrado por Swift.
  • Con la macro CF_IMPLICIT_BRIDGING_ENABLED, que activa el Clang arc_cf_code_audited, Swift puede manejar la administración de memoria para el valor de retorno

Para más detalles: https://nshipster.com/unmanaged/


CGImage ahora es administrado por ARC. CGImageRelease() ya no es necesario en él. Puede saberlo mirando en CGImage.h y observando que incluye la macro CF_IMPLICIT_BRIDGING_ENABLED . Esto indica que Apple ha auditado este archivo para asegurarse de que cumple con las convenciones de nomenclatura de administración de memoria para que ARC pueda administrar la memoria de los objetos devueltos por las funciones de este archivo.

EDIT: estaba leyendo sobre esto y me di cuenta de que era engañoso. No quiero decir que CGImageRelease no es necesario en ObjC (que es más o menos lo que implicaba aquí ...) Quiero decir que debido a la auditoría, Swift es capaz de manejarlo. En el código ObjC, aún necesita liberar estos objetos.