2014-10-09 12 views
7

In iOS 8 (e 8.1 beta) le prestazioni di creazione di una stringa NSAttributo sono molto peggiori di 7 (2-3x). Ciò è particolarmente evidente se si utilizzano più istanze sulla stessa vista, il caricamento di 4 etichette diverse causerà un ritardo di oltre un secondo da quando l'utente tocca e viene visualizzata la nuova vista.NSAttributoLe prestazioni della stringa peggiorano con iOS 8

Sfortunatamente non si può nemmeno lanciare questo in un altro thread, poiché utilizza WebKit dietro le quinte. Ho inviato un bug ad Apple, ma ho bisogno di idee su soluzioni alternative o un approccio di implementazione migliore.

In viewDidLoad:

self.labelOne.attributedText = [[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUTF8StringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } 
                documentAttributes:nil 
                    error:&error]; 

rapida progetto di esempio: https://github.com/BenSS/AttributedStringTest

UPDATE:
iOS9 migliora le cose ancora una volta, quindi la velocità non è completamente paralizzante l'interazione utente. Sfortunatamente non è ancora veloce come in iOS7. (testalo tu stesso con la demo!)

risposta

5

Al WWDC di quest'anno (2014) ho portato questo comportamento con il team di TextKit. Nello specifico, stavo elaborando il modo in cui alcuni di noi hanno bisogno di supporto per l'analisi asincrona dell'HTML. Sono stati sorpresi dal fatto che non ci sono API pubbliche per la creazione di stringhe attribuite in modo asincrono.

Dato che il nucleo di alcune delle nostre app riguarda il rendering di grandi quantità di testo HTML, il rendering del sistema fornito è tutt'altro che ideale anche su iOS 7. Così, mi è stato detto di archiviare un bug; più bug vengono archiviati su questo problema, maggiore è la probabilità che Apple lo indirizzi.

Il mio suggerimento è quello di utilizzare DTCoreText, forniscono esattamente ciò di cui tutti abbiamo bisogno per quanto riguarda questo problema. L'unica altra soluzione è aspettare.

+1

E 'ridicolo che abbiano perso le scarse prestazioni di questo sotto gli 8 visto che andava bene fino a 7. Grazie per il suggerimento di DTCoreText, poiché questo è un buon punto fermo anche per le nostre esigenze. – Ben

+0

Lo so, penso che i ragazzi di Apple siano stati spinti incredibilmente per iOS 8 e hanno rilasciato un sacco di ottime API ma purtroppo alcune cose sono state trascurate. Data l'importanza attribuita al kit di testo, possiamo solo sperare che questo venga risolto con iOS 9 –

+0

@DanielGalasko Qualche idea se lo fosse? –