作者: Vong_HUST
今天和大家分享一下第三方开源库使用到的一些实用的 Clang attributes
。
图1出自 PSPDFUIKitMainThreadGuard
————一个用于检测是否在非主线程调用 UI 相关的工具,使用的是 __attribute__((constructor))
,被该修饰符修饰的函数(仅对 C 函数生效),会在 main 函数之前执行,但是稍微比 +load 晚一点,因为 dyld
调用完 image
中所有类的 load
方法之后才会调用 image
中的 constructor
。这个修饰符支持优先级的设置,如 __attribute__((constructor(1024)))
,其中 1~100 为系统保留。
下面代码出自 YYModel,修饰符 __inline__ __attribute__((always_inline))
意味着强制内联,什么意思呢?就是它看起来是一个函数,但是编译的时候,会被编译器优化,相当于把函数体内代码直接插入到被调用的地方,这样就避免掉了一些压栈、返回等操作,加快调用。
当然系统也有很多宏是对 Clang attributes
的封装,一些系统封装宏代码如下,更多例子可以自行查看系统头文件。
参考链接: