2011-10-03 12 views
11

Sto cercando di capire se dovrei memorizzare nella cache [UIFont fontWithName: @ "myfont" size: 24]. Sto riutilizzando questo font in molti posti. Mi chiedo se iOS stia già memorizzando nella cache questo per me perché il caching dei font è molto comune a livello di sistema operativo.caching UIFont iOS?

Qualcuno può commentare questo?

Grazie.

risposta

18

L'ultima volta che ho controllato, i font di sistema sono stati memorizzati nella cache (cioè chiamando [UIFont systemFontOfSize:foo] due volte si ha restituito lo stesso oggetto). Non sono sicuro di quanto spesso la cache svuota, ma sembrerebbe molto sciocco non memorizzare nella cache i font, poiché vengono istanziati continuamente durante il caricamento del pennino.

Ovviamente, se lo stai facendo due volte nella stessa funzione, è leggermente più veloce memorizzarlo nella cache in una variabile locale (e riduce le dimensioni del codice, poiché le chiamate al metodo Obj-C sono enormi!). Se lo fai sporadicamente in posti diversi, potrebbe non valerne la pena.

Detto questo, è possibile accedere al carattere tramite un metodo di classe o un metodo su un "singleton" (ad esempio [MyAppBranding titleFont] o [[MyAppBranding currentBranding] titleFont]). Ciò significa che è possibile modificare il carattere utilizzato molto più facilmente, consente di aggiungere un ulteriore livello di memorizzazione nella cache se si nota che si tratta di un collo di bottiglia delle prestazioni e lo rende molto più semplice da supportare per più marchi.

18

Mi chiedo se iOS stia già memorizzando nella cache questo per me perché il caching dei font è molto comune a livello di SO.

è ciò che iOS (ho testato solo su iOS 6.1).

Volevo solo implementare la mia cache. Sai perché sono un ragazzo intelligente e il caricamento dei font probabilmente non è molto veloce.

Risulta persone in Apple sono intelligenti troppo. Gli oggetti restituiti da fontWithName:size: sono gli stessi per fontNames uguale e dimensioni uguali. C'è un meccanismo di memorizzazione nella cache.

A conferma di ciò ho messo un paio di NSLogs in tutta l'applicazione.

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

Tutti mostrano lo stesso indirizzo di memoria.

Anche con i caratteri personalizzati.