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という感じで
自分は使い分けたいと思います。