La mejor práctica de copiar y serialización de referencias de cuarzo
-
08-10-2019 - |
Pregunta
Tengo objetos que contienen referencias de cuarzo-2D (colores que describen, patrones de relleno, gradientes y sombras) en el cacao. Me gustaría poner en práctica el protocolo NSCoding
en mis objetos y por lo tanto necesitan para serializar las estructuras de cuarzo-2D opacos.
Las posibles soluciones podrían ser:
-
Definir un conjunto de propiedades en mis objetos que permiten configurar las estructuras de datos desde cero cada vez que se necesiten. Los que entonces se puede serializar fácilmente. Ejemplo: Tienda cuatro flotadores para rojo, verde, azul y alfa, a continuación, utilizar
CGColorCreate
. Desventaja: La duplicación de la información, así la coherencia y potencial (en lo que va de menor importancia) problemas de consumo de espacio. Me necesidad de escribir manualmente los emisores de propiedad que recrean la estructura de cuarzo cada vez que un componente cambia. Que se hinchan sustancialmente mi código. -
Leer en las propiedades utilizando las funciones de cuarzo. Ejemplo: Uso
CGColorGetComponents
de colores. Desventaja: Parece que funciona para los colores. Pero no hay funciones equivalentes para otras estructuras, por lo que no veo cómo esto podría funcionar para cosas como gradientes, sombras, sombras, etc. -
Leer en las propiedades directamente desde las estructuras primas, opacas. Desventaja: Como dice la documentación, las estructuras se supone que es opaco. Por lo que en caso de que algo cambia bajo el capó, el código se romperá. (Apple ciertamente no habría proporcionado una función como
CGColorGetComponents
si eso se supone que debe hacerse.) Por otra parte, las cosas como el interior de unCGFunctionRef
CGShadingRef
realmente estarían buscando problemas.
¿Cuál es la mejor práctica para serializar estructuras de cuarzo?
Solución
La respuesta varía bastante de una clase a la siguiente:
- CGImage: Uso CGImageDestination para hacer un archivo TIFF de ella. (Equivalente a método
TIFFRepresentation
de NSImage.) - CGPath: Escribir una función de aplicador se puede utilizar para describir elementos de la ruta como, por ejemplo, el código PostScript. Escribir un intérprete sencilla para ir la otra dirección.
- CGColorSpace:. Puede exportar la representación CPI
- CGColor:. Lo que usted describe, pero no se olvide de incluir el espacio de color
- CGLayer: enrevesado:. Hacer un contexto de mapa de bits, dibujar la capa en él, y volcar una imagen del contexto, a continuación, serializar que
- CGFont: El nombre debe ser suficiente para la mayoría de aplicaciones. Si usted está siendo realmente de lujo (es decir, utilizando la función de variaciones), tendrá que incluir diccionario variaciones de la fuente. Vas a tener que mantener su conocimiento del tamaño de la fuente por separado, ya CGFont no tiene uno y CGContext no le permite obtener la configurada en el mismo.
- CGPDFDocument: De un vistazo rápido, parece que CGPDFObjects son inmutables, por lo que usted acaba de archivar los datos originales del pdf o la URL lo obtuvo de un .
- CGGradient, CGPattern, CGShading, y la mayoría de otras clases: Sí, estás jodido. Usted sólo tiene que mantener toda la información que ha creado el objeto por separado.