- 不要等到明天,明天太遥远,今天就行动。
须读:看完该文章你能做什么?
清楚知道什么时候调用load,什么时候调用initalize方法。知道继承调用load、initalize的顺序
学习前:你必须会什么?
什么是类,什么是继承
一、本章笔记
只要程序启动就会将类的代码 加载内存中,放到代码区
一、load
1.load方法 会在当前类 被加载到内存的时候调用,而且仅会调用一次
2.如果存在继承关系, 会先调用 父类的load方法, 再调用子类的load方法
二、initialize
1.当 当前类 第一次被使用的时候 就会调用(创建类对象的时候)
2.initialize 方法在整个程序的运行过程中 只会被调用一次, 无论你使用1多少次这个类 都只会调用一次
3.initialize 用于对某一个类 进行一次性的初始化
4.initialize 和 load一样, 如果存在继承关系, 会先调用父类的 initialize 再调用子类的 initialize
二、code
main.m
#pragma mark 18-类的启动过程
#pragma mark 概念
/*
只要程序启动就会将类的代码 加载内存中,放到代码区
一、load
1.load方法 会在当前类 被加载到内存的时候调用,而且仅会调用一次
2.如果存在继承关系, 会先调用 父类的load方法, 再调用子类的load方法
二、initialize
1.当 当前类 第一次被使用的时候 就会调用(创建类对象的时候)
2.initialize 方法在整个程序的运行过程中 只会被调用一次, 无论你使用1多少次这个类 都只会调用一次
3.initialize 用于对某一个类 进行一次性的初始化
4.initialize 和 load一样, 如果存在继承关系, 会先调用父类的 initialize 再调用子类的 initialize
*/
#pragma mark - 代码
#import <Foundation/Foundation.h>
#pragma mark 类
#import "Person.h"
#import "Student.h"
#import "GoodStudent.h"
#pragma mark - main函数
int main(int argc, const char * argv[])
{
// Person *p1 = [[Person alloc]init];
// Person *p2 = [[Person alloc]init];
GoodStudent *s1 = [[GoodStudent alloc]init];
return 0;
}
Car
>>>.h
#import <Foundation/Foundation.h>
@interface Car : NSObject
+ (void)load;
@end
>>>.m
#import "Car.h"
@implementation Car
+ (void)load
{
NSLog(@"Car 类被加载到内存了");
}
+ (void)initialize
{
NSLog(@"Car initialize");
}
@end
######Person
```objc
>>>.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
+ (void)load;
@end
>>>.m
#import "Person.h"
@implementation Person
// 只要程序启动就会将类的代码 加载内存中,放到代码区
// 1.load方法 会在当前类 被加载到内存的时候调用,而且仅会调用一次
// 2.如果存在继承关系, 会先调用 父类的load方法, 再调用子类的load方法
+ (void)load
{
NSLog(@"Person 类被加载到内存了");
}
/*
1.当 当前类 第一次被使用的时候 就会调用(创建类对象的时候)
2.initialize 方法在整个程序的运行过程中 只会被调用一次, 无论你使用1多少次这个类 都只会调用一次
3.initialize 用于对某一个类 进行一次性的初始化
4.initialize 和 load一样, 如果存在继承关系, 会先调用父类的 initialize 再调用子类的 initialize
*/
+ (void)initialize
{
NSLog(@"Person initialize");
}
@end
######Student
```objc
>>>.h
#import "Person.h"
@interface Student : Person
@end
>>>.m
#import "Student.h"
@implementation Student
+ (void)load
{
NSLog(@"Student 类被加载到内存了");
}
+ (void)initialize
{
NSLog(@"Student initialize");
}
@end
######GoodStudent
```objc
>>>.h
#import "Student.h"
@interface GoodStudent : Student
@end
>>>.m
#import "GoodStudent.h"
@implementation GoodStudent
+ (void)load
{
NSLog(@"GoodStudent 类被加载到内存了");
}
+ (void)initialize
{
NSLog(@"GoodStudent initialize");
}
@end
控制台输出
Car 类被加载到内存了
Person 类被加载到内存了
Student 类被加载到内存了
GoodStudent 类被加载到内存了
Person initialize
Student initialize
GoodStudent initialize