// // 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