zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    数制
    转移指令检测题9
    转移指令笔记(1)
    汇编笔记
    汇编语言学习笔记
    C++中的虚函数
    windows程序设计(四)
    windows程序设计(三)
    windows程序设计(二)
    通过Url网络编程实现下载
  • 原文地址:https://www.cnblogs.com/madaha/p/9789858.html
Copyright © 2011-2022 走看看