+load方法与+initialize方法

+load方法与+initialize方法

  • load:iOS应用启动时会加载所有类,加载类的时候调用.

缺点:当加载类需要的资源比较昂贵,或者比较耗时时,可能导致不良的用户体验,或者系统抖动。

  • initialize:类加载时不会执行该方法,只有当实例化该类时,在该实例接收到第一个消息前执行该方法。可以看做类加载的延时方法。

alloc会为类实例化在堆上分配变量,此时会调用一次initialize方法,且仅调用一次,再次alloc时,不会再调用initialize方法了。

initialize会在运行时仅被触发一次,如果没有向类发送消息的话,这个方法将不会被调用,该方法是线程安全的,父类会比子类先收到此消息。

如果希望在类及其Category中执行不同的初始化的话,可以使用+load方法。+(void)load; 在Objective-C运行时载入类或者Category时被调用这个方法对动态库和静态库中的类或Category都有效.

在Mac OS X 10.5及之后的版本,初始化的顺序

  1. 调用所有的Framework中的初始化方法
  2. 调用所有的+load方法
  3. 调用C++的静态初始化方及C/C++中的attribute(constructor)函数
  4. 调用所有链接到目标文件的framework中的初始化方法

一个类的+load方法在其父类的+load方法后调用。

一个Category的+load方法在被其扩展的类的自有+load方法后调用。

在+load方法中,可以安全地向同一二进制包中的其它无关的类发送消息,但接收消息的类中的+load方法可能尚未被调用。

初始化方法执行顺序

  1. 按顺序执行所有定义的类的load方法
  2. 按顺序执行所有定义的类的Category的load方法(前提是重写了load方法)
  3. 按顺序首次向类实例发送消息前执行initialize方法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容