OCの種々の遍歴法の効率比較
12222 ワード
ブログを見て、とてもおもしろくて、OCのいろいろな遍歴方法の効率、自分でもテストするつもりです.どれが効率的なのか見てみましょう.
準備作業:配列をリロードし、1千万個のオブジェクトを配列に追加します.
1.通常forサイクルのテスト
コンソール出力:
私はめまいがして、私のここの時間の差は7.684 sです
2.テストfor-in
コンソール出力:
時間の差は5.486 sだった.Time(for-in) < Time(for)
3.Blockブロックのテスト
コンソール出力:
時間の差は7.662 sだった.Time(for-in) < Time(block) < Time(for)
4.試験列挙器
コンソール出力:
時間の差は6.192 sだった.
大まかな結論(不正確):Time(for-in)
準備作業:配列をリロードし、1千万個のオブジェクトを配列に追加します.
1 #pragma mark - Lazy Methods
2 - (NSMutableArray *)objArray {
3 if (!_objArray) {
4 _objArray = [NSMutableArray array];
5 for (int i = 0; i < 10000000; i ++) {
6 [_objArray addObject:[[NSObject alloc] init]];
7 }
8 }
9 return _objArray;
10 }
1.通常forサイクルのテスト
1 #pragma mark - for
2 - (void)testCommonForCycle {
3 NSMutableArray *tempArray = [NSMutableArray array];
4 NSLog(@"Beign");
5 for (int i = 0; i < self.objArray.count; i ++) {
6 [tempArray addObject:self.objArray[i]];
7 }
8 NSLog(@"End");
9 }
コンソール出力:
1 2016-03-16 16:59:33.301 OC [5462:405485] Beign
2 2016-03-16 16:59:40.985 OC [5462:405485] End
私はめまいがして、私のここの時間の差は7.684 sです
2.テストfor-in
1 #pragma mark - for-in
2 - (void)testForInCycle {
3 NSMutableArray *tempArray = [NSMutableArray array];
4 NSLog(@"Beign");
5 for (NSObject *obj in self.objArray) {
6 [tempArray addObject:obj];
7 }
8 NSLog(@"End");
9 }
コンソール出力:
1 2016-03-16 17:06:35.303 OC [5477:410562] Beign
2 2016-03-16 17:06:40.789 OC [5477:410562] End
時間の差は5.486 sだった.Time(for-in) < Time(for)
3.Blockブロックのテスト
1 #pragma mark - Block
2 - (void)testBlock {
3 NSMutableArray *tempArray = [NSMutableArray array];
4 NSLog(@"Beign");
5 [self.objArray enumerateObjectsUsingBlock:^(NSObject *obj, NSUInteger idx, BOOL * _Nonnull stop) {
6 [tempArray addObject:obj];
7 }];
8 NSLog(@"End");
9 }
コンソール出力:
1 2016-03-16 17:10:28.941 OC [5543:414507] Beign
2 2016-03-16 17:10:36.603 OC [5543:414507] End
時間の差は7.662 sだった.Time(for-in) < Time(block) < Time(for)
4.試験列挙器
1 #pragma mark -
2 - (void)testEnumerator {
3 NSMutableArray *tempArray = [NSMutableArray array];
4 NSLog(@"Beign");
5 NSEnumerator *enumerator = [self.objArray objectEnumerator];
6 while (enumerator.nextObject) {
7 [tempArray addObject:enumerator.nextObject];
8 }
9 NSLog(@"End");
10 }
コンソール出力:
1 2016-03-16 17:16:31.255 OC [5565:418958] Beign
2 2016-03-16 17:16:37.447 OC [5565:418958] End
時間の差は6.192 sだった.
大まかな結論(不正確):Time(for-in)