Trong quá khứ, chúng ta phải sử dụng NSEnumerator để lặp qua một tập hợp:
NSEnumerator *enumerator = [strings objectEnumerator];
NSString *thing;
while ((thing = [enumerator nextObject])) {
NSLog (@"woo. %@", thing);
}
Thực sự không có gì sai với NSEnumerator. Chỉ là nó vụng về. Bạn cần tạo một đối tượng (điều này đòi hỏi phân bổ bộ nhớ động). Sau đó, bạn phải lịch sự yêu cầu từng đối tượng từ enumerator (điều này đòi hỏi gửi tin nhắn Objective-C cho mỗi đối tượng). Đó là một số lượng đáng kể chi phí phụ, đặc biệt nếu bạn lặp qua các tập hợp nhỏ.
NSFastEnumeration cho phép các lớp, cả của Apple và của chúng ta, tìm hiểu cách tối ưu hóa việc lặp qua nội dung của nó. Bạn thường có thể tránh phân bổ bộ nhớ cũng như việc gửi tin nhắn cho mỗi đối tượng trong tập hợp. Ngoài ra, nó giảm số dòng mã và số biến cục bộ bổ sung.
NSArray *strings =
[NSArray arrayWithObjects: @"greeble", @"bork", @"hoover", nil];
for (NSString *thing in strings) {
NSLog (@"Woo! %@", thing);
}