[iPhone]高精度タイマーの使い方 NSTimeInterval



CoreGraphics(Quartz)の性能を評価するのに時間計測をしたかったのだが、1/1000秒のオーダーで時間計測はどうすればいいかわからなかったので調べたら、NSTimeIvervalクラスを使えばよいことがわかった。

測定を開始するタイミングで

NSDate *startTime = [NSDate date];

経過時間を求めるタイミングで

NSTimeInterval elapsedTime = [startTime timeIntervalSinceNow];
NSString* str = [NSString stringWithFormat:@"Elapsed time: %f", -elapsedTime];

NSTimeInterval型はdouble型と同じで、こんなかんじに浮動小数点で時間が求められる。

んで実際の速度測定の結果なんだけど
Quartzで10ピクセルの直線をランダムで色を変えながら100本描写した時の計測結果
img_00023

iPhone実機で0.1秒くらい。シミュレータだと0.01秒くらいだった。
全然違うっていうか、10倍。思ったよりiPhoneのCoreGraphicsの描写は速くないってのが感想。

以下その描写部分のソースコード

- (void)drawRect:(CGRect)rect {

	NSDate *startTime = [NSDate date];
	CGContextRef ctx = UIGraphicsGetCurrentContext();

	CGContextSetLineWidth(ctx,10.0);
	for(int i = 0; i< 100;i++){

		float fRed = (float)(rand()%100) / 100;
		float fGreen = (float)(rand()%100) / 100;
		float fBlue = (float)(rand()%100) / 100;
		float fAlfa = (float)(rand()%100) / 100;

		CGContextSetRGBStrokeColor(ctx, fRed,fGreen,fBlue, fAlfa);
		CGContextMoveToPoint(ctx,rand()%300,rand()%430);
		CGContextAddLineToPoint(ctx,rand()%300,rand()%430);
		CGContextStrokePath(ctx);
	}
	NSTimeInterval elapsedTime = [startTime timeIntervalSinceNow];
	NSString* str = [NSString stringWithFormat:@"Elapsed time: %f", -elapsedTime];  

	UIFont *font = [UIFont systemFontOfSize:24];
	[str drawAtPoint:CGPointMake(0,0) withFont:font];
}

tAkatronixおすすめのiPhone開発本

iPhone デベロッパーズ クックブック
Erica Sadun
ソフトバンククリエイティブ
売り上げランキング: 84906
詳解 Objective-C 2.0
詳解 Objective-C 2.0
posted with amazlet at 10.01.31
荻原 剛志
ソフトバンククリエイティブ
売り上げランキング: 4163
iPhoneプログラミングUIKit詳解リファレンス
所 友太
リックテレコム
売り上げランキング: 3089
iPhone Core Audioプログラミング
永野 哲久
ソフトバンククリエイティブ
売り上げランキング: 22615
Bookmark and Share

関連記事

    1. No comments yet.
    (will not be published)