Pregunta

Me temo que este es un código malvado:

CGRect iRect = CGRectMake(0.0f, 0.0f, 320.0f, 400.0f);
UIImageView *imgView = [[UIImageView alloc] initWithFrame:iRect];
imgView.animationImages = [NSArray arrayWithObjects:
                [UIImage imageNamed:@"b0001.png"],
                [UIImage imageNamed:@"b0002.png"],
                // 150 more
                [UIImage imageNamed:@"b0152.png"],
                nil];

Recuerdo ligeramente que imageNamed: es malvado. Si lo hago de esta manera, y tengo para proporcionar objetos UIImage, entonces esos objetos UIImage cargan inmediatamente esos archivos de imagen en la memoria, ¿verdad? Y, además de eso, todos esos 152 objetos gruesos de UIImage toman un gran descanso en la memoria porque son lanzados automáticamente, ¿no?

Entonces, en conclusión, usar esta técnica es una mierda. ¿Lo hace? No lo sé. En mi viejo iPod touch de primera generación, parece funcionar sin retraso a 25 fps. Muy suave y agradable. Lo único que temo es que algunos otros dispositivos pueden pensar diferente sobre esto. Aunque tengo el iPod touch más débil programable disponible.

De todos modos, ¿alguien ve alguna posibilidad de mejora allí? ¿O no debería usar eso y usar setImage: de UIImageView en un algoritmo propio que cargaría y establecería esas imágenes con selectores diferidos usando esa imagen gruesa de ImageWithContentsOfFile (puede llamarse diferente), sin liberación automática? ¿Quizás algún tipo inteligente escribió una pequeña lib para videos de pulgares de alto rendimiento que consisten en secuencias de imágenes?

(no, el video no es una opción en el iPhone; los marcos de Apple para esto solo admiten pantalla completa, y no sé de nada más que lo haga)

¿Fue útil?

Solución

Me mantendría alejado de intentar cargar tantas imágenes en una matriz UIImageView. Una pregunta similar fue preguntado aquí . El método de amortiguación que describo allí también debería aplicarse a su situación.

Otros consejos

Tienes razón sobre imageNamed ... no deberías usarlo en muchos casos ya que internamente almacena en caché la imagen. Uso:

[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image1" ofType:@"png"];

La única vez que desea usar imageNamed es cuando

1) Está reutilizando un icono una y otra vez (vistas de tabla, etc.)
2) No ha implementado su propio sistema de almacenamiento en caché

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