Pregunta

Tengo un UITableView que muestra una gran cantidad de imágenes en las células, y yo no soy de dejar de fumar, feliz por el desplazamiento de rendimiento.Mi UITableView es algo así como la aplicación de fotos en el iphone.¿Alguien sabe por qué el iphone foto de la aplicación se desplaza tan condenadamente rápido como si su nada en la pantalla.

Y ¿alguien tiene algunos tips/trucos para aumentar mi rendimiento/velocidad de desplazamiento?

¿Fue útil?

Solución

Usted debe precache sus imágenes y no perezosamente.A medida que se desplaza a su mesa los UITableViewDataSource:cellForRowAtIndexPath: el método se llama, y si va a cargar sus imágenes de allí entonces verás que se solicita su contenido de la celda como su desplazamiento, la creación de latencia en su aplicación.Intenta poner a hacer su cellForRowAtIndexPath:algo como esto:

NSDate *date = [NSDate date];
... your cell loading code ...
NSLog( @"Elapsed time to generate cell %.2d", [date timeIntervalSinceNow] );

Vas a ver cuánto se está gastando para llegar a cada célula.

Para evitar esto, puede ser tan complejo como usted necesita - si usted tiene un mucho de imágenes, vas a tener que ser más y más inteligente.Usted puede hacer paginado de carga, donde se guarda la pista de la última celda, se solicitó a la NSIndexPath, y determinar si el desplazamiento es hacia arriba o hacia abajo y el uso +NSImage:imageNamed: para recuperar de una vez a alguna página que vale la pena de imágenes hacia adelante (es decir, 5 imágenes por delante de su posición actual), o lo que funcione para usted (tomando ventaja del hecho de que la gente tiene que volver con su dedo hacia la parte inferior de la tabla para que pase de nuevo, y así el consumo de los elementos de la tabla tiene pausas - usted puede hacer que su página de tamaño lo suficientemente grande como para llenar el dedo).Esta es, probablemente, todavía no muy bien, porque vas a estar sufriendo toda su impacto a la vez en lugar de un trémulo de carga para cada una de las células.

Usted puede devolver el control a la interfaz de usuario rápidamente y permitir que el sistema para programar su prefetched página de imágenes utilizando NSRunLoop:performSelector:objetivo:argumento:orden:modo: fuera de las principales runloop utilizando NSImage:imageNamed: y, a continuación, cuando la célula se solicita si estás obteniendo lo suficiente por delante estará disponible para mostrar.

Usted necesita ser dolorosamente conscientes de la preocupación por la memoria, aunque.Si usted está encontrando que esto sea un problema, utilice NSImage:initWithContentsOfFile:, que va a limpiar cachés de imagen en situaciones de memoria baja.Dependiendo de la estrategia utilizada por el algoritmo de invalidación de caché estas situaciones pueden provocar un "tartamudeo" como purgar la caché y tienen que volver a cargar su invalidado prefetches.

Otros consejos

Los resultados de rendimiento Gran desplazamiento han sido reportados por la subclasificación UITableViewCell y dibujar el contenido de cada celda directamente. Ver la respuesta aceptada para esta pregunta para más detalles y enlaces a ejemplos de código.

El problema aquí es la memoria, que va a cargar demasiadas imágenes de alta resolución a la vez, la aplicación Imágenes no utiliza un tableview que utiliza una vista de desplazamiento y sólo se carga un máximo de 3 imágenes a la vez, por lo que la memoria no es una preocupación, si u están tratando de hacer algo similar a la aplicación Imágenes utilizar una vista de desplazamiento

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top