在 __ attribute __((构造函数))函数中使用自己项目中定义的类是否安全?当调用 __ attribute __((构造函数))函数时,Objective-C运行时是否有机会对类执行所需操作?或者我是否误解了运行时如何加载类,并且在此上下文中库类和您自己的类之间没有区别?
答案 0 :(得分:7)
我建议你使用+ initialize
或+ load
而不是属性,但这是我的偏好。
当运行时加载类时,将调用类的+ load
方法。
类的+ initialize
方法在类中的任何其他方法之前调用。
来自load
的文档:
在Mac OS X v10.5上,初始化顺序如下:
- 您链接到的任何框架中的所有初始值设定项。
- 图片中的所有+加载方法。
- 所有C ++静态初始化程序和C / C ++ 属性(构造函数)在您的映像中起作用。
- 链接到您的框架中的所有初始值设定项。
醇>另外:
- 在所有超类'+ load方法之后调用类的+ load方法。
- 在类自己的+ load方法之后调用category + load方法。
在+ load方法中,您可以安全地从同一图像中发送其他不相关的类,但这些类上的任何+ load方法可能还没有运行。
这表明在初始化运行时之后将运行任何属性或+ load
方法。由于+ load
是您的类的一个方法,并且在任何属性方法之前运行,然后运行时必须设置您的类。
答案 1 :(得分:0)
这些不是函数,它们只是编译器属性表示法。它们根本不会改变生成的代码。