• ios 内联函数 inline ---分解LFLiveKit


    /*
     内联函数:用 inline 关键字修饰的函数。内联函数不是在函数调用时发生控制转移,类似于《宏》在编译时将函数体替换每一个调用的代码位置。
     
     相较于普通函数:
     1、普通函数(没有inline修饰)汇编时会出现Call指令,而调用Call指令需要
     2、函数之间的调用实则内存地址之间的调用,当函数调用执行完毕后会返回到原来执行函数的地址,所有函数调用有一定的时间开销。
        内联函数减少了调用开销,提高了效率(执行速度较普通函数快一些)
     3、集成了宏的优点(函数支持用宏代码替换)
     
     相较于宏:
     1、避免了宏需要的预编译,inline修饰的函数也是函数,不需要预编译
     2、可以使用当前类的私有成员@private及保护成员@protected
     3、在调用一个内联函数时会对参数进行校验,保证调用正确。
     
     看一个问题分两面:
     1、内联函数只是我们向编译器提供的申请,编译器不一定采用inline的形式调用
     2、内联函数无法承载大量、复杂代码,否则有可能抵消高效率的好处
     3、内联函数你不允许使用循环语句和开关 (for、while等)
     4、内联函数必须定义在调用之前
     
     */
    
    inline static NSString *formatedSpeed(float bytes, float elapsed_milli) {
        if (elapsed_milli <= 0) {
            return @"N/A";
        }
    
        if (bytes <= 0) {
            return @"0 KB/s";
        }
    
        float bytes_per_sec = ((float)bytes) * 1000.f /  elapsed_milli;
        if (bytes_per_sec >= 1000 * 1000) {
            return [NSString stringWithFormat:@"%.2f MB/s", ((float)bytes_per_sec) / 1000 / 1000];
        } else if (bytes_per_sec >= 1000) {
            return [NSString stringWithFormat:@"%.1f KB/s", ((float)bytes_per_sec) / 1000];
        } else {
            return [NSString stringWithFormat:@"%ld B/s", (long)bytes_per_sec];
        }
    }
        NSLog(@"debugInfo uploadSpeed: %@", formatedSpeed(debugInfo.currentBandwidth, debugInfo.elapsedMilli));

    参考:

    https://www.jianshu.com/p/d557b0831c6a

    https://www.cnblogs.com/iosshare/archive/2016/05/11/5483330.html

  • 相关阅读:
    Dynamics CRM修改密码界面
    Dynamics CRM新加了组织后提示数据加密错误的解决方法
    ADFS修改默认访问端口
    Dynamics CRM与ADFS安装到同一台服务器后ADFS服务与Dynamics CRM沙盒服务冲突提示808端口占用问题
    Dynamics CRM各个版本的元数据浏览解决方案
    Dynamics CRM9.0安装CRM的时候提示Microsoft.Crm.Setup.Server.RegisterSandboxServiceAction操作失败
    IIS误删了默认网站,恢复方法
    grafana配置邮件告警
    Git连接Gitlab并提交内容
    docker自定义bridge
  • 原文地址:https://www.cnblogs.com/madaha/p/9789858.html
Copyright © 2020-2023  润新知