2011-10-03 10 views
11

Estoy tratando de averiguar si debo almacenar en caché [UIFont fontWithName: @ "myfont" size: 24]. Estoy reutilizando esta fuente en muchos lugares. Me pregunto si iOS ya me está almacenando en caché porque el almacenamiento en caché de fuentes es muy común en el nivel del sistema operativo.iOS UIFont caché?

¿Alguien puede comentar sobre esto?

Gracias.

Respuesta

18

La última vez que verifiqué, las fuentes del sistema se almacenaron en caché (es decir, llamar al [UIFont systemFontOfSize:foo] dos veces le devolvió el mismo objeto). No estoy seguro de con qué frecuencia se vacía el caché, pero me parece muy tonto no almacenar en caché las fuentes, ya que se crean instancias todo el tiempo durante la carga de la punta.

Por supuesto, si lo hace dos veces en la misma función, es un poco más rápido almacenarlo en una variable local (y reduce el tamaño del código, ¡ya que las llamadas al método Obj-C son enormes!). Si lo haces esporádicamente en diferentes lugares, puede que no valga la pena el esfuerzo.

Dicho esto, es posible que desee acceder a la fuente a través de un método de clase o un método en un "singleton" (por ejemplo, [MyAppBranding titleFont] o [[MyAppBranding currentBranding] titleFont]). Esto significa que puede cambiar la fuente utilizada mucho más fácilmente, le permite agregar una capa adicional de almacenamiento en caché si nota que se trata de un cuello de botella de rendimiento y hace que mucho sea más fácil de admitir varias marcas.

18

Me pregunto si iOS ya me está almacenando en caché porque el almacenamiento en caché de fuentes es muy común en el nivel del sistema operativo.

eso es lo que hace iOS (solo probé en iOS 6.1).

Solo quería implementar mi propio almacenamiento en caché. Ya sabes porque soy un tipo inteligente y la carga de fuentes probablemente no sea muy rápida.

Resulta que las personas en Apple también son inteligentes. Los objetos devueltos por fontWithName:size: son los mismos para iguales caracteres de fuente e iguales tamaños. Hay un mecanismo de almacenamiento en caché en su lugar.

Para confirmar esto pongo un par de NSLogs en toda la aplicación.

NSLog(@"GillSans 12 %p", [UIFont fontWithName:@"GillSans" size:12.0f]); 

Todos ellos muestran la misma dirección de memoria.

Funciona con sus fuentes personalizadas también.

Cuestiones relacionadas