Hatena::Groupiphone-dev

iOS プログラミングメモ

2009-01-23 (Fri)

NSEnumerator より高速列挙の方が速いのかな 17:18  NSEnumerator より高速列挙の方が速いのかな - iOS プログラミングメモ を含むブックマーク

高速列挙あんまりちゃんと覚えてなくて NSEnumerator ばっかり使ってたから全体的に Enumerator 臭でいっぱいなんですけど、どうも高速列挙の方が早そうな気がするので調べてみた次第。

ていうか、Fast Enumerator って事らしいので早くて当然なんだけど、思ったほどの違いは確認出来なかった。

test_enu: 0.102547
test_for: 0.084477

あ、そうだ、実機で確認してみたらもっと差が出るかもしんないっすね。後で試そう。

以下テストに使ったコード。こいつが悪いから性能差が確認出来なかったんだな、きっと。

@interface Hoge :NSObject {
   NSMutableArray *lists;
}

- (void) setup;
- (void) test_enu;
- (void) test_for;

@end

@implementation Hoge

- (void) setup {
   lists = [NSMutableArray array];
   int i;
   for(i = 0 ; i < 1000000; i ++) {
      [lists addObject:[NSNumber numberWithInt:i]];
   }
   [lists retain];
}

- (void) test_enu {
   NSEnumerator *enu = [lists objectEnumerator];
   id obj;
   while(obj = [enu nextObject]) {
      int hoge = [obj intValue];
      hoge;
   }
}

- (void) test_for {
   id obj;
   for(obj in lists) {
      int hoge = [obj intValue];
      hoge;
   }
}

- (void) dealloc {
   [lists release];
   [super dealloc];
}

@end

int main (int argc, const char * argv[]) {
   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
   srand((unsigned)time(NULL));

   Hoge *hoge = [[Hoge alloc] init];
   [hoge setup];

   NSDate *start;

   start = [NSDate date];
   [hoge test_enu];
   NSLog(@"test_enu: %g", [[NSDate date] timeIntervalSinceDate:start]);

   start = [NSDate date];
   [hoge test_for];
   NSLog(@"test_for: %g", [[NSDate date] timeIntervalSinceDate:start]);

   [pool drain];
   return 0;
}
トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20090123