Estoy viendo algunos problemas de rendimiento con Core Text cuando se ejecuta en el iPad original.Core Text Performance
He creado una vista editable utilizando Core Text y el protocolo UITextInput
que se basa en OmniGroup's OUIEditableFrame
.
Cuando hay una buena cantidad de texto en la vista, digamos 180 líneas, la escritura/entrada se retrasa mucho y un toque en una tecla generalmente demora 1-2 segundos.
Usando instrumentos con el simulador pude reducir el problema y descubrir lo que estaba tomando tanto tiempo. Resulta que es porque vuelvo a dibujar el cuadro con cada golpe de tecla, lo que ocupa mucho tiempo es llamar al CTFramesetterCreateWithAttributedString
y CTFramesetterCreateFrame
.
Tengo que volver a dibujar con cada golpe de tecla para que el texto se actualice, esto significa llamar al CTFramesetterCreateWithAttributedString
y CTFramesetterCreateFrame
.
¿Alguien más ha encontrado este problema y, de ser así, cómo lo han solucionado?
EDIT:
hecho un poco de investigar más a fondo y resulta que si la cadena no tiene atributos atribuido a continuación, todo lo dibuja de modo mucho más rápido y sin ningún tipo de retraso. Cambiar el estilo de la fuente, el color o los párrafos todo lo ralentiza. ¿Alguna idea de si esto podría tener algo que ver con eso?
¿Puedes elaborar más sobre cómo eliminar/ocultar cualquier atributo? – adit
Obtenga el rango de la parte visible de la vista de texto, recorra todos los atributos de la cadena atribuida y luego elimine los que no estén en ese rango. – Joshua
Puedo confirmar esto: estaba usando un solo atributo personalizado con diferentes valores dependiendo de la ubicación en la cadena. Quitarlo produjo un aumento de velocidad de 5X en CTFramesetterCreateFrame(). Los otros 2 atributos que utilicé que tenían el mismo valor para toda la cadena no tuvieron impacto en el rendimiento. – Pol