第04天OC语言(18):类的启动过程

  • 不要等到明天,明天太遥远,今天就行动。
须读:看完该文章你能做什么?

清楚知道什么时候调用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 
#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 

@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 

@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

你可能感兴趣的:(第04天OC语言(18):类的启动过程)