关于os_signpost使用

2020-07-17  本文已影响0人  格雷s

os_signpost结合TimeProfile在性能优化的数据展示中能够更加直观、方便,这里主要展示如何在项目中使用os_signpost

1.代码展示

//引入头文件
#import <os/signpost.h>
//宏定义,实际开发中,区分Debug、Release
#define SP_BEGIN_LOG(subsystem, category, name) \
os_log_t m_log_##name = os_log_create((#subsystem), (#category));\
os_signpost_id_t m_spid_##name = os_signpost_id_generate(m_log_##name);\
os_signpost_interval_begin(m_log_##name, m_spid_##name, (#name));

#define SP_END_LOG(name) \
os_signpost_interval_end(m_log_##name, m_spid_##name, (#name));

//耗时统计
- (void)viewDidAppear:(BOOL)animated {
    /*
     统计这段区间的执行次数,耗时,等等,更加直观
     SP_BEGIN_LOG(systemname, category, name);
     systemname:自定义,可以用bundleId
     category:在timeprofile中统计分类时使用,相同的扼categroy在同一个分类下
     name:具体统计名称
     */
    SP_BEGIN_LOG(custome, gl_log, viewDidAppear);
    [super viewDidAppear:animated];
    [NSThread sleepForTimeInterval:2];
    [self.view bringSubviewToFront:self.enterBtn];
    NSLog(@"viewDidAppear");
    SP_END_LOG(viewDidAppear);
    
    
    os_log_t m_log = os_log_create("custome", "gl_log");\
    for(int i = 0; i < 10; i++) {
        os_signpost_id_t signid_1 = os_signpost_id_generate(m_log);
        os_signpost_interval_begin(m_log, signid_1, "asynctest");
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            NSLog(@"打印的第%d遍",i);
            os_signpost_interval_end(m_log, signid_1, "asynctest", "index%d",i);
        });
    }
}

2.TimeProfile调试

先上一张Demo图


image.png
上一篇 下一篇

猜你喜欢

热点阅读