美文网首页iOS 的那些事儿
iOS开发 CG_INLINE、static inline内联函

iOS开发 CG_INLINE、static inline内联函

作者: LuckyBugGo | 来源:发表于2019-05-31 13:41 被阅读0次

    static inlinedefine都是一种宏定义语法。define一般用来预编译常量,static inline一般用来预编译函数。

    1. 在定义函数时,define会引起语义上的歧义
    #define MULTI(x) (x*x)
    
    NSLog(@"MULTI(10):%d", MULTI(10));
    NSLog(@"MULTI(10+10):%d", MULTI(10+10));
    

    打印结果为:

    MULTI(10):100
    MULTI(10+10):120
    

    很显然,在处理MULTI(10+10)时,一般理解为:(10+10)*(10+10)=400。但是define只是将x简单替换,所以实际为:10+10*10+10=120

    static inline int MULTI2(int x) {
        return x*x;
    };
    
    NSLog(@"MULTI2(10):%d", MULTI2(10));
    NSLog(@"MULTI2(10+10):%d", MULTI2(10+10));
    

    打印结果为:

    MULTI2(10):100
    MULTI2(10+10):400
    

    当使用static inline预编译时,不会造成语义上的歧义,而且效率更高。

    参考资料

    1. iOS OC内联函数 inline
    2. 内联函数:static inline 和 extern inline 的含义

    相关文章

      网友评论

        本文标题:iOS开发 CG_INLINE、static inline内联函

        本文链接:https://www.haomeiwen.com/subject/eyzitctx.html