Có vẻ như từ thử nghiệm rằng biểu thức thu thập chỉ được đánh giá một lần. Hãy xem xét ví dụ sau:Mục tiêu c "cho mỗi" (liệt kê nhanh) - đánh giá bộ sưu tập?
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);
Đầu ra là:
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
chỉ ra rằng [tự fcn] được gọi là chỉ một lần.
Có ai có thể xác nhận rằng đây là hành vi được chỉ định (trái ngược với quan sát đơn thuần) không?
Những gì tôi có trong tâm trí đang làm một cái gì đó như thế này:
for (UIView *v in [innerView subviews]) {
thay vì điều này:
NSArray *vs = [innerView subviews];
for (UIView *v in vs) {
Suy nghĩ?
Nhờ những điều đó, đặc biệt. Shmurk, người đã cố gắng trả lời ... điều này thực sự làm sáng tỏ vấn đề. (Kiểm tra một thực hiện để làm rõ một đặc điểm kỹ thuật là nguy hiểm. Dù sao, tôi đã làm điều đó trong việc chuẩn bị câu hỏi.) –