//
//  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 initialize2017-08-23 15:09:01.543395+0800 类的启动过程[36844:863122] Studnet initialize2017-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

oc40--类的启动过程相关推荐

  1. Android系统默认Home应用程序(Launcher)的启动过程源代码分析

    在前面一篇文章中,我们分析了Android系统在启动时安装应用程序的过程,这些应用程序安装好之后,还需要有一个Home应用程序来负责把它们在桌面上展示出来,在Android系统中,这个默认的Home应 ...

  2. Spring Boot启动过程(二)

    书接上篇 该说refreshContext(context)了,首先是判断context是否是AbstractApplicationContext派生类的实例,之后调用了强转为AbstractAppl ...

  3. Spring 容器的启动过程

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 本文来源:http://r6f.cn/b47K 一. 前言 ...

  4. Android应用程序进程启动过程的源代码分析(1)

    Android应用程序框架层创建的应用程序进程具有两个特点,一是进程的入口函数是ActivityThread.main,二是进程天然支持Binder进程间通信机制:这两个特点都是在进程的初始化过程中实 ...

  5. tomcat启动_tomcat学习|tomcat的启动过程

    开头说两句 小刀博客: https://www.lixiang.red 小刀公众号: 程序员学习大本营 学习背景 在前两篇中,我们讲述了tomcat的源码结构 https://www.lixiang. ...

  6. linux系统配置之开机启动过程(centos)

    1.开机流程如下: 2.BIOS BIOS是英文"Basic Input Output System"的缩略词,直译过来后中文名称就是"基本输入输出系统".其实 ...

  7. 干货 | 走进Node.js之启动过程剖析

    走进Node.js之启动过程剖析 作者:正龙 (沪江Web前端开发工程师) 本文原创,转载请注明作者及出处. 随着Node.js的普及,越来越多的开发者使用Node.js来搭建环境,也有很多公司开始把 ...

  8. Android系统默认Home应用程序(Launcher)的启动过程源代码分析(3)

    Step 13.  ActivityStack.startActivityLocked 这个函数定义在frameworks/base/services/java/com/android/server/ ...

  9. Dalvik VM进程系统(二):分析Zygote的启动过程

    Android系统进程启动流程 android系统的Zygote进程是所有android进程的父进程,包括SystemServer和各种应用进程都是通过Zygote进程fork出来的.Zygote(孵 ...

最新文章

  1. python每行输出8个式子_求大神用python写出算术题的式子和结果。
  2. 为什么分数是循环小数
  3. python之路-day18-反射
  4. 卡尔曼滤波(Calman Filter)基本原理
  5. html代码type,HTML中type是什么意思
  6. Java图片压缩 BufferedImage Linux 下代码阻塞不工作
  7. 使用ASP.NET Membership
  8. 关于algorithm的sort函数
  9. 华为云NP考试题库_华为认证考试题库-HCNP
  10. 多商户商城系统如何对接电商收付通?
  11. 【已解决】华为手机USB调试和监控ADB安装应用的选项变成了灰色如何解决 | 华为荣耀9手机USB调试和监控ADB安装应用选项变成了灰色怎么办
  12. 美国物流发展趋势对中国物流的影响
  13. 曙光服务器怎么外接显示器,iPad平板外接显示器教程 | iPad平板怎么外接显示器_什么值得买...
  14. 洛阳理工学院linux实验报告,谁来给我抄实验报告啊!这一张又一张写得。。。。...
  15. 最全工业以太网通讯协议
  16. Ubuntu11.04中文输入法的安装(IBus-pinyin
  17. 24种设计模式的定义和使用场合
  18. 示波器播放Bad apple坏苹果教程XY模式
  19. 移动web微金所实战项目——js
  20. 【嵌入式linux】进程间通信的几种方式

热门文章

  1. BC30138: 无法在路径“C:\WINDOWS\TEMP\”中创建临时文件: 拒绝访问。
  2. 预测人民币在2006年最终的收盘价
  3. PowerPoint中的LinkFormat对象
  4. Targan 算法[有向图强连通分量]
  5. vs2013 openmp例子
  6. 算法:三角形最小路径和
  7. linux下挂载和卸载的命令的用法:mount 、umount
  8. 2D平台游戏王牌英雄的AI寻路解决方案
  9. 数据显示,近半数人依然坚持在用 Windows 7
  10. ASP.NET MVC开发中常见异常及解决方案