可变数组也可以使用枚举方法, 我们在这里提供了两种枚举方法, 一个是正序枚举, 一个是倒序枚举, 在正序枚举中, 元素的个数和顺序都是不可以修改的, 但是在倒序枚举中却可以修改, 这有些耐人寻味.
涉及的方法:
objectEnumerator: 正序枚举方法.
reverseObjectEnumerator: 倒序枚举方法.
下面我们来看看例子:
//使用了枚举法的可变数组 #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSMutableArray *array = [[NSMutableArray alloc]initWithObjects:@"One", @"Tow", @"Three", nil]; //objectEnumetator是一个正序枚举法. //在使用正序枚举法的时候, 元素个数和元素顺序不允许修改. // NSEnumerator *enumerator = [array objectEnumerator]; // NSString *str; // int i = 0; // while (str = [enumerator nextObject]){ // [array removeLastObject]; // NSLog(@"%d", i); // } // //reverseObjectEnumerator是一个逆序的枚举法. //在逆序枚举法, 元素的个数和元素的顺序允许修改. //PS:在逆序枚举法使用任何犯法去改变元素的个数或元素顺序都是可行的. NSEnumerator *enumerator = [array reverseObjectEnumerator]; NSString *str; while (str = [enumerator nextObject]) { [array removeLastObject]; NSLog(@"%@", str); } //因为这里循环了3次, 每一次都会删除一个元素, 这样子就会导致输出来的结果是空的. //2014-10-12 12:24:20.242 EnumNSMutableArray[881:303] () NSLog(@"%@", array); [array release]; } return 0; }
2014-10-13 20:17:48.793 EnumNSMutableArray[6403:303] Three
2014-10-13 20:17:48.794 EnumNSMutableArray[6403:303] Tow
2014-10-13 20:17:48.794 EnumNSMutableArray[6403:303] One
2014-10-13 20:17:48.795 EnumNSMutableArray[6403:303] (
)
Program ended with exit code: 0