static inline

首先看段代码

static inline BOOL IsEmpty(id thing) {

    return thing == nil || [thing isEqual:[NSNull null]]

    || ([thing respondsToSelector:@selector(length)]

        && [(NSData *)thing length] == 0)

    || ([thing respondsToSelector:@selector(count)]

        && [(NSArray *)thing count] == 0);

}

首先重温一下static的作用:

static是静态修饰符, 由他修饰的变量会保存在全局数据区

普通的局部变量或者全局变量, 都是有系统自动分配内存的, 并且当变量离开作用域的时候释放掉

而使用static修饰的变量, 则会在程序运行期都不会释放, 只有当程序结束的时候才会释放

因此对于那些需要反复使用的变量, 我们通常使用static来修饰, 避免重复创建导致不必要的内存开销

static inline

inline函数, 即内联函数, 他可以向编译器申请, 将使用inline修饰的函数内容, 内联到函数调用的位置

内联函数的作用类似于#define, 但是他比#define有一些优点

相对于函数直接调用: inline修饰的函数, 不会再调用这个函数的时候, 调用call方法, 就不会将函数压栈, 产生内存消耗

相对于宏:

宏需要预编译, 而内联函数是一个函数, 不需要预编译

编译器调用内联函数的时候, 会检查函数的传参是否正确, 但是宏就不会提醒参数

但是内联函数的使用也有限制

内联函数只能对一些小型的函数起作用, 如果函数中消耗的内存很大, 比如for循环, 则内联函数就会默认失效

使用static的原因

函数在运行过程中也会分配内存, 但是由于static的存在, 因此就和修饰变量类似, 他只会开辟一块内存空间

建议

对于一些经常用的做判断的小方法, 可以使用内联函数, 避免使用#define的过于臃肿

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容