Por que a enumeração rápida não ignora os NSNumbers quando eu especifico NSString

Pensei que sabia como usar a enumeração rápida, mas há algo que não entendo. Se eu criar trêsNSString objetos e trêsNSNumber objetos e coloque-os em umNSMutableArray:

NSString *str1 = @"str1";
NSString *str2 = @"str2";
NSString *str3 = @"str3";

NSNumber *nb1 = [NSNumber numberWithInt:1];
NSNumber *nb2 = [NSNumber numberWithInt:2];
NSNumber *nb3 = [NSNumber numberWithInt:3];

NSArray *array = [[NSArray alloc] initWithObjects:str1, str2, str3, nb1, nb2, nb3, nil];

então eu faço enumeração rápida em todos osNSString objetos, assim:

for (NSString *str in array) {
    NSLog(@"str : %@", str);
}

No console, eu recebo este resultado:

2011-08-02 13:53:12.873 FastEnumeration[14172:b603] str : str1
2011-08-02 13:53:12.874 FastEnumeration[14172:b603] str : str2
2011-08-02 13:53:12.875 FastEnumeration[14172:b603] str : str3
2011-08-02 13:53:12.875 FastEnumeration[14172:b603] str : 1
2011-08-02 13:53:12.876 FastEnumeration[14172:b603] str : 2
2011-08-02 13:53:12.876 FastEnumeration[14172:b603] str : 3

Eu registrei apenas oNSStrings, mas recebo uma linha para cada objeto na matriz, até oNSNumbers e eu não entendo o porquê. A enumeração rápida sempre usa todos os objetos contidos em uma matriz?

questionAnswers(8)

yourAnswerToTheQuestion