oc40--类的启动过程

//
//  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
原文地址:https://www.cnblogs.com/yaowen/p/7418320.html