看起来很清楚它应该设置一些东西。
- 具体什么时候运行?
- 为什么有两个括号?
- 是
__attribute__
一个函数? - 这在 C 中有效吗?
- 它所使用的函数是否需要是静态的?
- 什么时候
__attribute__((destructor))
跑步?
__attribute__((constructor))
static void initialize_navigationBarImages() {
navigationBarImages = [[NSMutableDictionary alloc] init];
}
__attribute__((destructor))
static void destroy_navigationBarImages() {
[navigationBarImages release];
}
答案
- 它在加载共享库时运行,通常是在程序启动期间。
- 所有 GCC 属性都是如此;
- GCC 特定语法。
- 是的,这适用于 C 和 C 。
- 不,该函数不需要是静态的。
- 析构函数在共享库卸载时运行,通常在程序退出时运行。
因此,构造函数和析构函数的工作方式是共享对象文件包含特殊部分(ELF 上的 .ctors 和 .dtors),其中包含对分别用构造函数和析构函数属性标记的函数的引用。
想想看,普通的静态链接器中可能存在一些类似的魔力,因此无论用户选择静态还是动态链接,在启动/关闭时都会运行相同的代码。