#import "ViewController.h"
#import <mach/mach_time.h>
static dispatch_once_t once;
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
//获取@synchronized执行时间
CGFloat t_s = BNRTimeBlock(^{
@synchronized(self) {
[NSThread sleepForTimeInterval:1];
}
});
//获取dispatch_once执行时间
CGFloat t_d = BNRTimeBlock(^{
dispatch_once(&once, ^{
[NSThread sleepForTimeInterval:1];
});
});
}
//获取block执行时间
CGFloat BNRTimeBlock (void (^block)(void)) {
mach_timebase_info_data_t info;
if (mach_timebase_info(&info) != KERN_SUCCESS) return -1.0;
uint64_t start = mach_absolute_time ();
block ();
uint64_t end = mach_absolute_time ();
uint64_t elapsed = end - start;
uint64_t nanos = elapsed * info.numer / info.denom;
return (CGFloat)nanos / NSEC_PER_SEC;
}
@end