+load方法和+initialize方法的解释

1,我在网上找了很多的文章,看了很多,这里我就先简单明了的介绍一下这两个方法的作用和调用时间.后期再把相关的实验写上来,来勉励自己和奋斗在开发一线的亲们!

一, +load方法

1,说明:

+load方法是类的加载方法,是在编译的时候或程序启动的时候类调用的方法.每个类都有load方法.不管子类有没有写load方法,父类的load方法也是只执行一次的.

2,+load方法的调用顺序如下说明:

(1),父类的+load方法先于子类的+load方法调用.
(2),当前类的+load方法先于分类的+load方法.
(3),+load方法只调用一次,而且+load方法不适用继承和{super load]的形式.

3,作用:

+load方法的作用,可以在用于一个类的里面两个方法进行交换.(交换方法)

//Person.m
-(void)personSay { NSLog(@"I am a Person"); }

//Student.m
-(void)studentSay { NSLog(@"I am a Student"); }

//Student.m load方法里面对方法实现进行交换
+(void)load
{
    //实现personSay与studentSay方法的交换
    Method personMethod = class_getInstanceMethod([Person class], NSSelectorFromString(@"personSay"));
    Method studentMethod = class_getInstanceMethod([Student class], NSSelectorFromString(@"studentSay"));

    method_exchangeImplementations(personMethod, studentMethod);
}

//这个时候我们在main.m的函数里面使用student实例对象调用方法studentSay,打印结果为I am a Person

二, +initialize方法

1,说明:

+initialize方法的是类的初始化(我个人理解的是,因为initialize本身的意思就是初始化),就是一个类的也要初始化,形成一个类.不然的话,没有这个类怎么生成类的对象.

2,+initialize的调用时间和顺序

(1),在类收到第一条消息之前调用.
(2),父类的+initialize方法先与子类的+initialize方法接收到消息.
(3),如果子类没有实现+initialize方法,那么父类方法会实现多次+initialize方法.(因为父类先与子类接收到消息,所以父类先调用一次+initialize方法, 然后如果子类没有实现+initialize方法,那么就会自动调用父类的initialize方法,所以会调用两次父类的+initialize方法)

3,作用:

可以初始化静态变量.

三,下面的两个例题可以测试 一下自己对刚才的两个概念进行进一步的理解

//第一个呢:在子类的Student.m的load方法中写法如下,Person的load方法不实现:
+(void)load
{
    [Student class];
    [Person class];
}
//第二个呢:在父类的Person.m的load方法中写法如下,Student的load方法不实现
+(void)load
{
    [Student class];
    [Person class];
}

你可能感兴趣的:(+load方法和+initialize方法的解释)