3
3

More than 5 years have passed since last update.

iOSでDebugの時だけの時間計測クラス

Last updated at Posted at 2016-03-30

2017/04/28
今更だけど肝心のNSLogで出力を最後に入れ忘れてた...

重たい処理を高速化する時の目安程度に作ってみた

時間計測クラス

Measure.h
#import <Foundation/Foundation.h>

#ifdef DEBUG

//デバッグ時だけ計測
#define MEASURE_START [Measure measureMethod:^{
#define MEASURE_END_M(message) } withMessage:(message)];
#define MEASURE_END }];
#else

#define MEASURE_START
#define MEASURE_END_M(message)
#define MEASURE_END

#endif


typedef void (^measureBlock)();

@interface Measure : NSObject
+(void)measureMethod:(measureBlock)block;
+(void)measureMethod:(measureBlock)block withMessage:(NSString *)message;
@end

Measure.m

#import "Measure.h"

@implementation Measure
+(void)measureMethod:(measureBlock)block{
[Measure measureMethod:block withMessage:nil];
}

+(void)measureMethod:(measureBlock)block withMessage:(NSString *)message{
  NSDate *start = [NSDate date];
  block();
  NSTimeInterval time = -[start timeIntervalSinceNow];
  NSString *log = [NSString stringWithFormat:@"process time = %lf", time];
  if (message) {
    log = [NSString stringWithFormat:@"%@ process time = %lf", message, time];
  }
  NSLog(@"%@", log);
}
@end

使い方

howToUse.m
#import "Measure.h"
.
.
.

//メッセージをつけない場合
MEASURE_START
[self hogehoge1];
MEASURE_END

//戻り値がない場合
MEASURE_START
[self hogehoge1];
MEASURE_END_M(@"[hogehoge1]")

//戻り値がある場合   __blockがいるよ
__block UIImage *hogeImg = nil;
MEASURE_START
hogeImg =[self hogehoge2];
MEASURE_END_M(@"[hogehoge2]")

.
.
.

出力

process time = 0.065342
[hogehoge1] process time = 0.065342
[hogehoge2] process time = 0.12345

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3