iOS开发iOS Developer首页投稿(暂停使用,暂停投稿)

iOS开发 +(void)load 和 +(void)initi

2016-11-22  本文已影响611人  Li_Cheng

在iOS开发中,就像Application有生命周期回调方法一样,在Objective-C的类被加载和初始化的时候,也可以收到方法回调,可以在适当的情况下做一些定制处理。而这正是本篇文章所要介绍的-(void)init+(void)initialize 方法可以帮我们做到的。

load和initialize的共同特点

loadinitialize 有很多共同特点,下面简单列一下:

+load方法

通俗的讲:
在程序启动之前会调用所有的类的(手动实现的) +load 方法(没有实现就不调用咯),按(父类->子类->类别)的顺序调用.

+initialize方法

通俗的讲:
在程序启动之后,在第一次创建这个类的对象的时候(也就是分配内存空间alloc的时候),会调用该类的 +initialize 方法且只调用一次.

调用顺序:
1.如果父类的 initialize 方法没有被调用过会先调用父类的 initialize 方法)
2.如果该类有类别只会调用类别的 +initialize (如果有多个类别会调用某一个类别的 initialize 方法,其他的不会调用)]

由于 initialize 的这些特点,使得其应用比 load 要略微广泛一些。可用来做一些初始化工作,或者单例模式的一种实现方案。

官方文档

Apple的官方文档很清楚地说明了 initialize 和 load 的区别在于:

load 是只要类所在文件被引用就会被调用,而 initialize 是在类或者其子类的第一个方法被调用前调用。所以如果类没有被引用进项目,就不会有 load 调用;但即使类文件被引用进来,但是没有使用,那么 initialize 也不会被调用。

上一篇 下一篇

猜你喜欢

热点阅读