Parece de la experimentación que la expresión de colección se evalúa solo una vez. Considere este ejemplo:Objetivo c "para cada uno" (enumeración rápida) - evaluación de la colección?
static NSArray *a;
- (NSArray *)fcn
{
if (a == nil)
a = [NSArray arrayWithObjects:@"one", @"two", @"three", nil];
NSLog(@"called");
return a;
}
...
for (NSString *s in [self fcn])
NSLog(@"%@", s);
La salida es:
2010-10-07 07:37:31.419 WidePhotoViewer Lite[23694:207] called
2010-10-07 07:37:31.420 WidePhotoViewer Lite[23694:207] one
2010-10-07 07:37:31.425 WidePhotoViewer Lite[23694:207] two
2010-10-07 07:37:31.425 WidePhotoViewer Lite[23694:207] three
que indica que [libre FCN] se llama sólo una vez.
¿Alguien puede confirmar que este es el comportamiento especificado (en lugar de simplemente observado)?
Lo que tengo en mente es hacer algo como esto:
for (UIView *v in [innerView subviews]) {
en lugar de esto:
NSArray *vs = [innerView subviews];
for (UIView *v in vs) {
Pensamientos?
Gracias a ellos, esp. Shmurk, que intentó responder ... esto de hecho arrojó algo de luz sobre el asunto. (Verificar una implementación para aclarar una especificación es peligroso. De todos modos, ya lo había hecho al preparar la pregunta.) –