//
// main.m
// 类的启动过程
#import <Foundation/Foundation.h>
#import "Person.h"
#import "GoodStudent.h"
/* 只要程序启动就会将所有类的代码加载到内存中, 放到代码区
load方法会在当前类被加载到内存的时候调用, 有且仅会调用一次
如果存在继承关系, 会先调用父类的load方法, 再调用子类的load方法*/
int main(int argc, const char * argv[]) {
/*2017-08-23 15:05:08.882568+0800 类的启动过程[36713:860727] Car类被加载到内存了
2017-08-23 15:05:16.019104+0800 类的启动过程[36713:860727] Person类被加载到内存了
2017-08-23 15:05:17.390692+0800 类的启动过程[36713:860727] Student类被加载到内存了
2017-08-23 15:05:19.161607+0800 类的启动过程[36713:860727] GoodStudent类被加载到内存了
还没有使用类的时候就加载到内存了。
*/
Person *p1 = [[Person alloc] init];
Person *p2 = [[Person alloc] init];
Person *p3 = [[Person alloc] init];
Person *p4 = [[Person alloc] init];
GoodStudent *gstu = [[GoodStudent alloc] init];
/*
2017-08-23 15:08:55.461633+0800 类的启动过程[36844:863122] Person initialize
2017-08-23 15:09:01.543395+0800 类的启动过程[36844:863122] Studnet initialize
2017-08-23 15:09:06.376914+0800 类的启动过程[36844:863122] GoodStudent initialize */
return 0;
}
//
// Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
@end
//
// Person.m
#import "Person.h"
@implementation Person
// 只要程序启动就会将所有类的代码加载到内存中, 放到代码区
// load方法会在当前类被加载到内存的时候调用, 有且仅会调用一次
// 如果存在继承关系, 会先调用父类的load方法, 再调用子类的load方法
+ (void)load
{
NSLog(@"Person类被加载到内存了");
}
// 当当前类第一次被使用的时候就会调用(创建类对象的时候)
// initialize方法在整个程序的运行过程中只会被调用一次, 无论你使用多少次这个类都只会调用一次
// initialize用于对某一个类进行一次性的初始化
// initialize和load一样, 如果存在继承关系, 会先调用父类的initialize再调用子类的initialize
+ (void)initialize
{
NSLog(@"Person initialize");
}
@end
//
// Student.h
#import "Person.h"
@interface Student : Person
@end
//
// Student.m
#import "Student.h"
@implementation Student
+ (void)load
{
NSLog(@"Student类被加载到内存了");
}
+ (void)initialize
{
NSLog(@"Studnet initialize");
}
@end
//
// GoodStudent.h
#import "Student.h"
@interface GoodStudent : Student
@end
//
// GoodStudent.m
#import "GoodStudent.h"
@implementation GoodStudent
+ (void)load
{
NSLog(@"GoodStudent类被加载到内存了");
}
+ (void)initialize
{
NSLog(@"GoodStudent initialize");
}
@end
//
// Car.h
#import <Foundation/Foundation.h>
@interface Car : NSObject
@end
//
// Car.m
#import "Car.h"
@implementation Car
+ (void)load
{
NSLog(@"Car类被加载到内存了");
}
+ (void)initialize
{
NSLog(@"Car initialize");
}
@end