Okogeki'sブログ

デキるエンジニアを目指すOkogekiのブログ

CATextLayerとUILabelの描写速度比較

CATextLayerの方が速いに決まってるんですけど、
どのくらい速いか気になったので簡単にテストコード書いて比較してみました。

・検証環境   
端末:iPhone5   
OS : iOS 8.1.2(12B440)

・検証方法
書いて載せてを200回繰り返すのにかかった時間を計測。

    //UILabelの場合
    NSDate *startDate;
    NSDate *endDate;
    int roopNum = 200;
    
    startDate = [NSDate date];
    for (int i = 0; i < roopNum; i++) {
        UILabel* label = [[UILabel alloc]init];
        [label setFont:[UIFont fontWithName:@"Helvetica-Bold" size:20]];
        [label setFrame:CGRectMake(self.view.center.x, self.view.center.y, 200, 100)];
        [label setText:@"Hello World"];
        label.textAlignment = NSTextAlignmentCenter;
        label.textColor = [UIColor blackColor];
        [self.view addSubview:label];
    }
    //計測終了
    endDate = [NSDate date];
    NSTimeInterval interval = [endDate timeIntervalSinceDate:startDate];
    NSLog(@"UILabel処理時間 = %.3f秒",interval);
    //CATextLayerの場合
    NSDate *startDate;
    NSDate *endDate;
    int roopNum = 200;
    
    //計測開始
    startDate = [NSDate date];
    for (int i = 0; i < roopNum; i++) {
        CATextLayer *label = [[CATextLayer alloc] init];
        [label setFont:@"Helvetica-Bold"];
        [label setFontSize:20];
        [label setFrame:CGRectMake(self.view.center.x, self.view.center.y, 200, 100)];
        [label setString:@"Hello World"];
        [label setAlignmentMode:kCAAlignmentCenter];
        [label setForegroundColor:[[UIColor blackColor] CGColor]];
        [self.view.layer addSublayer:label];
    }
    //計測終了
    
    endDate = [NSDate date];
    NSTimeInterval interval = [endDate timeIntervalSinceDate:startDate];
    NSLog(@"layer処理時間 = %.3f秒",interval);

・結果
CATextLayer:0.094秒
UITextLabel : 0.063秒

・感想
あんまり変わらない。
よほどシビアなパフォーマンスを求めない限り、使い勝手の良いUILabelで良さそうです。
パフォーマンスを求めて使い分けというよりは、
直接描写したい時はCATextLayerで、その他はUILabelという感じで
自分は使い分けたいと思います。