MST

星途 面试题库

面试题:Objective-C中+load与+initialize方法的调用时机及区别

请简述在Objective-C中,类方法+load与+initialize分别在什么情况下会被调用,并且说明它们之间有哪些明显的区别。
12.3万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

+load方法

  1. 调用情况
    • 当类或分类被加载到内存时,会调用其+load方法。加载顺序是先加载主类,再加载分类。并且无论类或分类是否被使用,只要被加载就会调用+load方法。
  2. 特点
    • 每个类和分类的+load方法在程序启动时只调用一次。
    • 类的+load方法会在其所有超类的+load方法之后调用。
    • 分类的+load方法会在其主类的+load方法之后调用。

+initialize方法

  1. 调用情况
    • 当类或其任何子类接收到第一条消息时,会调用类的+initialize方法。如果子类没有实现+initialize方法,会调用父类的+initialize方法(前提是父类还没有被初始化)。
  2. 特点
    • 每个类的+initialize方法在首次使用该类或其子类时调用,只调用一次。
    • 运行时系统会保证在调用子类的+initialize方法之前,其父类的+initialize方法已经被调用。

区别

  1. 调用时机
    • +load在类和分类被加载到内存时调用;+initialize在类或子类接收到第一条消息时调用。
  2. 调用频率
    • +load每个类和分类只调用一次;+initialize每个类只调用一次,但可能通过子类触发父类的+initialize方法。
  3. 继承关系影响
    • +load类的+load方法调用在超类之后,分类在主类之后;+initialize子类若未实现,会调用父类的,但父类已调用过则不会重复调用。