ios获取FPS

由于想统计一下动画增加时对性能的影响,就写了几个小函数,用于获取FPS.

  • PS:看过一个FPSLabel的例子,里面用了几个类来实现,虽然功能看起来很多,但那些不相干功能封装在一起我认为严重不合理,特别是动不动就实例化,我极反感,根本不需要消耗内存的事情为什么要实例化.
  • FPS全局只需要一个,其它地方只需要获取一下当前FPS就好了,最大化减少资源消耗.
  • 在获取FPS前调用一下fpsStart()进行初始化,然后不断调用getFpsCount()就是FPS了
static CADisplayLink *gs_fpsLink = nil;
static size_t gs_fpsCount = 0;

void fpsStart()
{
    if (gs_fpsLink) return;
    
    CADisplayLink *link = [CADisplayLink displayLinkWithTarget:[IOSUtils class] selector:@selector(fpsTick:)];
    [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
    gs_fpsLink = link;
}

size_t getFpsCount()
{
    return gs_fpsCount;
}

void fpsStop()
{
    [gs_fpsLink removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
    gs_fpsLink = nil;
}

@implementation IOSUtils
+ (void)fpsTick:(CADisplayLink *)link
{
    static size_t _count = 0;
    static NSTimeInterval _lastTime = 0;
    
    if (_lastTime == 0) {
        _lastTime = link.timestamp;
        return;
    }
    
    _count++;
    NSTimeInterval delta = link.timestamp - _lastTime;
    if (delta < 1) return;
    
    _lastTime = link.timestamp;
    double fps = _count / delta;
    _count = 0;
    
    gs_fpsCount = (size_t)round(fps);
}
@end

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 124,473评论 18 136
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 161,567评论 24 692
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 29,073评论 18 398
  • 我是谁?我是谁?此刻,窗外的鸟儿不知名的鸟儿在啾啾,声音婉转,我坐在床上,窗外依然时太阳下山的光景了,楼下有人在说...
    水玲珑英子阅读 142评论 0 0
  • 总有这样的朋友,在朋友圈分享些什么,他总觉得那都没什么 你知道我说的哪种人么? 我发一张这学期的课表,他就说,才这...
    喵呜_阅读 130评论 0 0
  • 若可 若可, 我只想做深秋的一片叶子, 就按照自己的脉落生长, 用最妖娆的色彩, ...
    别具一格格阅读 70评论 0 0
  • 若离里里阅读 413评论 0 3