猛省 例外処理は思った以上に遅い

猛省しました
戒めのために

#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倍遅い