safe __attribute __((constructor))函数类

时间:2012-01-23 21:19:14

标签: objective-c cocoa

__ attribute __((构造函数))函数中使用自己项目中定义的类是否安全?当调用 __ attribute __((构造函数))函数时,Objective-C运行时是否有机会对类执行所需操作?或者我是否误解了运行时如何加载类,并且在此上下文中库类和您自己的类之间没有区别?

2 个答案:

答案 0 :(得分:7)

我建议你使用+ initialize+ load而不是属性,但这是我的偏好。

当运行时加载类时,将调用类的+ load方法。

类的+ initialize方法在类中的任何其他方法之前调用。

来自load的文档:

  

在Mac OS X v10.5上,初始化顺序如下:

     
      
  1. 您链接到的任何框架中的所有初始值设定项。
  2.   
  3. 图片中的所有+加载方法。
  4.   
  5. 所有C ++静态初始化程序和C / C ++ 属性(构造函数)在您的映像中起作用。
  6.   
  7. 链接到您的框架中的所有初始值设定项。
  8.         

    另外:

         
        
    • 在所有超类'+ load方法之后调用类的+ load方法。
    •   
    • 在类自己的+ load方法之后调用category + load方法。
    •   
         

    在+ load方法中,您可以安全地从同一图像中发送其他不相关的类,但这些类上的任何+ load方法可能还没有运行。

这表明在初始化运行时之后将运行任何属性或+ load方法。由于+ load是您的类的一个方法,并且在任何属性方法之前运行,然后运行时必须设置您的类。

答案 1 :(得分:0)

这些不是函数,它们只是编译器属性表示法。它们根本不会改变生成的代码。