Цель c «для каждого» (быстрое перечисление) - оценка коллекции?

Из экспериментов кажется, что выражение коллекции вычисляется только один раз. Рассмотрим следующий пример:

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) {

Мысли?

11
задан Marc Rochkind 7 October 2010 в 13:45
поделиться