似乎很清楚它应该进行设置。
- 具体什么时候运行?
- 为什么有两个括号?
__attribute__
是一个函数吗?宏?句法?- 这在 C 中有效吗? C++?
- 它使用的功能是否需要是静态的?
__attribute__((destructor))
什么时候运行?
__attribute__((constructor))
static void initialize_navigationBarImages() {
navigationBarImages = [[NSMutableDictionary alloc] init];
}
__attribute__((destructor))
static void destroy_navigationBarImages() {
[navigationBarImages release];
}
原文由 Casebash 发布,翻译遵循 CC BY-SA 4.0 许可协议
因此,构造函数和析构函数的工作方式是共享对象文件包含特殊部分(ELF 上的 .ctors 和 .dtors),其中包含对分别标记有构造函数和析构函数属性的函数的引用。当库被加载/卸载时,动态加载程序(ld.so 或 somesuch)检查这些部分是否存在,如果存在,则调用其中引用的函数。
想一想,普通静态链接器中可能有一些类似的魔法,因此无论用户选择静态链接还是动态链接,都可以在启动/关闭时运行相同的代码。