Кажется, из эксперимента, что выражение коллекции оценивается только один раз. Рассмотрим этот пример:
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);
Вывод:
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
указывающий, что [self fcn] вызывается только один раз.
Может ли кто-нибудь подтвердить, что это указано (в отличие от просто наблюдаемого) поведения?
То, что я имею в виду, делает что-то вроде этого:
for (UIView *v in [innerView subviews]) {
вместо этого:
NSArray *vs = [innerView subviews];
for (UIView *v in vs) {
Мысли?