iOS

+load方法与+initialize方法

2017-02-18  本文已影响3人  阿咿呀嘿

+load方法与+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方法
上一篇 下一篇

猜你喜欢

热点阅读