今天在無意中看到MBProgressHUD源碼解析中有這么一段代碼:
+ (MB_INSTANCETYPE)HUDForView:(UIView *)view {
NSEnumerator *subviewsEnum = [view.subviews reverseObjectEnumerator];
for (UIView *subview in subviewsEnum) {
if ([subview isKindOfClass:self]) { return (MBProgressHUD *)subview; } }
return nil;}
我感覺對NSEnumerator算是比較陌生吧,然后查了一下,應(yīng)該算是效能較高的一種遍歷NSArray的方式,直接測試了一下,由于簡單測試功能,速度方面感覺無明顯效果.
NSMutableArray<NSString *>* arr = [NSMutableArray array];
arr[0] = @"0";
arr[1] = @"1";
arr[2] = @"2";
arr[3] = @"3";
arr[4] = @"4";
NSEnumerator* arrEnum = [arr objectEnumerator];
id object;
while (object = [arrEnum nextObject]) {
NSLog(object);
操作
}
實際上,調(diào)用了objectEnumerator方法的時候,返回的是一個id類型的object,有時候在編譯階段還不知道具體是什么類的話,可以直接打印嘗試一下,使用nextObject這個方法可以得到一個指針,要注意的是 使用這種方式遍歷 遍歷過程中不可以對數(shù)組進行增刪操作 否則將會出現(xiàn)一些未知的錯誤
另外,我們最常用的循環(huán)方式還有
- 使用for循環(huán)加 count 方法遍歷
int i = 0;for(i = 0; i < [array count]; i++){
[array objectAtIndex:i]
操作
} - 使用for in方式遍歷
for(NSString *str in array){
操作
}
另外:其實這個感覺跟Java中的類的遍歷非常相似:
- Java中三種迭代是否能刪除(由于本人正在學(xué)習Java,隨便復(fù)習一下):
- 普通for循環(huán),可以刪除,但是索引要--
- 迭代器,可以刪除,但是必須使用迭代器自身的remove方法,否則會出現(xiàn)并發(fā)修改異常
- 增強for循環(huán)不能刪除