`+load`と`+initialize`

1608 ワード

+load公式文書の説明:
          oc runtime ,                    。
+load                        ,                 。
      :
1.   framework    
2、  +load  
3、  C++      c/c++     
4、            framework       
  :
*     +load            
*      +load       +load        
+loadメソッドの呼び出しタイミング:
  • クラスごとの+loadメソッドは1回しか呼び出されず、このクラスがプロジェクトに導入されたときに実行され、このクラスが使用されるかどうかにかかわらず、main関数の前に実行されます.分類された+loadメソッドの呼び出し順序はCompile Sourcesの順序と一致し、demo検証の下でこれらの問題を書きます:
  •       person
    Student  person 
      person + category1、person + category2
           +load  ,teacher   。
    +(void)load {
        NSLog(@"%s",__FUNCTION__);
    }
        :
    2019-07-22 15:42:21.453315+0800 AF3.0[50305:1631956] +[Person load]
    2019-07-22 15:42:21.454037+0800 AF3.0[50305:1631956] +[Student load]
    2019-07-22 15:42:21.467899+0800 AF3.0[50305:1631956] +[Student(category1) load]
    2019-07-22 15:42:21.468000+0800 AF3.0[50305:1631956] +[Student(category2) load]
    

    親優先サブクラス呼び出し+load、分類呼び出し+load Compile Sourcesの順序と一致していることがわかります.+initializeの公式文書:
    `+initialize `               。
    `runtime`                          `+initialize `  ,             。
    `runtime`  `+initialize `      ,             `+initialize `  ,                    ,  `+initialize `    .
                 `+initialize `  ,     `+initialize `      ,         `+initialize `,
               `+initialize `  :
    
    + (void)initialize {
      if (self == [ClassName self]) {
        // ... do the initialization ...
      }
    }