美文网首页八天学会OC
第04天OC语言(18):类的启动过程

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

作者: liyuhong | 来源:发表于2017-07-21 17:33 被阅读7次
  • 不要等到明天,明天太遥远,今天就行动。
须读:看完该文章你能做什么?

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

相关文章

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

    不要等到明天,明天太遥远,今天就行动。 须读:看完该文章你能做什么? 清楚知道什么时候调用load,什么时候调用i...

  • OC语言day04-18类的启动过程

    pragma mark 类的启动过程 pragma mark 概念 pragma mark 代码 Person.h...

  • 一些基本知识

    1.面向过程与面向对象 OC中的类是面向对象,C语言中的结构体是面向过程。OC不能直接编译,需要由runtime转...

  • 2018年6月26日【python学习笔记】

    类 1.编程思想: 面向过程编程:C语言(只有逻辑和过程) 面向对象编程:Java、c++、oc、python等(...

  • C语言入门

    课程要点: C语言是一种面向过程的语言,OC是一种面向对象的语言 类与对象的关联 如何在xcode中创建一个类 如...

  • 随笔

    oc实质上是在c语言的基础上进行了一层oc包装,也可以说c语言就是oc的父类(超类),所有oc语言能实现的功能用c...

  • OC总结(1)

    1.如何理解OC C语言是一种面向过程的语言,OC则是面相对象的语言,所以想要理解OC就要先了解面向过程和面向对象...

  • 第一章:熟悉OC

    OC语言特性:-1. OC是在C的语言基础上添加了面向对象特性。 -2. OC与C++,JAVA等面向对象的语言类...

  • 20-Swift调用OC和OC调用Swift

    一、Swift调用OC 创建一个Swift语言的工程; 用OC语言创建一个Person类:Swift调OC-1此时...

  • OC对象的本质(上)

    iOS | OC对象本质 | Objective-C 什么是OC语言,OC对象、类的本质是什么,OC对象的内存布局...

网友评论

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

    本文链接:https://www.haomeiwen.com/subject/lopnhxtx.html