猛省 例外処理は思った以上に遅い
猛省しました
戒めのために
#import <Foundation/Foundation.h> NSArray *testArray() { static NSMutableArray *array = nil; if(array) return array; array = [[NSMutableArray alloc] init]; for(int i = 0; i < 3; i++) { [array addObject:@""]; } return array; } // 例外上等! 無視すればいいのだ! void test01() { @try { [testArray() objectAtIndex:5]; } @catch(id ex){ // } } // 回避可能な例外は回避すべき! void test02() { NSArray *array = testArray(); if([array count] > 5) { [array objectAtIndex:5]; } } int main(int argc, char* argv[]) { id pool = [[NSAutoreleasePool alloc] init]; if(argc < 2) return -1; int type = atoi(argv[1]); void (*stra)() = NULL; switch(type) { case 0: stra = test01; break; case 1: stra = test02; break; } if(!stra) return -1; long i = 0; for(i = 0; i < 100000; i++) { stra(); } [pool release]; }
結果
MBP:~/tmp/src masaki$ time ./hoge 0 real 0m3.172s user 0m2.083s sys 0m0.742s MBP:~/tmp/src masaki$ time ./hoge 1 real 0m0.038s user 0m0.020s sys 0m0.007s
例外処理の方が100倍遅い