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

oc40--类的启动过程的更多相关文章

  1. 精尽Spring Boot源码分析 - SpringApplication 启动类的启动过程

    该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...

  2. OC-私有方法,构造方法,类的本质及启动过程

    总结 标号 主题 内容 一 OC的私有方法 私有变量/私有方法 二 @property 概念/基本使用/寻找方法的过程/查找顺序 三 @synthesize @synthesize概念/基本使用/注意 ...

  3. zookeeper源码分析之一服务端启动过程

    zookeeper简介 zookeeper是为分布式应用提供分布式协作服务的开源软件.它提供了一组简单的原子操作,分布式应用可以基于这些原子操作来实现更高层次的同步服务,配置维护,组管理和命名.zoo ...

  4. Openfire的启动过程与session管理

    说明   本文源码基于Openfire4.0.2.   Openfire的启动       Openfire的启动过程非常的简单,通过一个入口初始化lib目录下的openfire.jar包,并启动一个 ...

  5. SpringMVC启动过程详解(li)

    通过对SpringMVC启动过程的深入研究,期望掌握Java Web容器启动过程:掌握SpringMVC启动过程:了解SpringMVC的配置文件如何配置,为什么要这样配置:掌握SpringMVC是如 ...

  6. spark1.4.1 启动过程

    今天稍微没那么忙了,趁着这个时间,准备把spark的启动过程总结一下(),分享给大家.现在使用的spark1.4.1版本 当然前提是你已经把spark环境搭建好了. 1.我们启动spark的时候一般会 ...

  7. Linux启动过程详述

    http://www.ibm.com/developerworks/cn/linux/kernel/startup/index.html Linux启动第1步:引导内核 Linux启动第2步:内核部分 ...

  8. App的启动过程

    App的启动过程 所有的app都是通过launcher去启动的 launcher自己也是一个app,一个系统级别的app,放在asystem/app/下,使用系统签名. 对代码进行分析

  9. OGRE启动过程详解(OGRE HelloWorld程序原理解析)

    本文介绍 OGRE 3D 1.9 程序的启动过程,即从程序启动到3D图形呈现,背后有哪些OGRE相关的代码被执行.会涉及的OGRE类包括: Root RenderSystem RenderWindow ...

随机推荐

  1. hibernate annotation 之 一对多、多对一双向外键关联

    假设,一个农场产出多种植物,具体的某一植物产于某一农场. 3 import java.io.Serializable; 4 import java.util.Set; 5 import javax.p ...

  2. 关于编辑器对<input>标签报错提示“表单输入没有相关label”的问题

    相信很多朋友在制作表单的时候,我们的编辑器会有下图的相关提示吧 我们发现虽然这样并不影响我们的正常使用,但是看着这样的报错提示总是很让人心烦,那么这到底是为什么呢? 其实,这是因为编辑器建议我们在使用 ...

  3. SAS进阶《深入解析SAS》之SAS数据挖掘的一般流程

    SAS进阶<深入解析SAS>之SAS数据挖掘的一般流程 1. 所谓数据挖掘,是指通过对大量的数据进行选择.探索与建模,来揭示包含在数据中以前不为人所知的模式或规律,从而为商业活动或科学研究 ...

  4. linux shell & bash

    shell & bash shell指允许用户通过文本操作计算机的程序. interactive shell:从是否通过标准输入输出与用户进行交互的角度分为交互式shell(interacti ...

  5. JS——百度背景图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. CSS——border

    表格细线: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  7. 【sqli-labs】 less56 GET -Challenge -Union -14 queries allowed -Variation3 (GET型 挑战 联合查询 只允许14次查询 变化3)

    单引号括号闭合 http://192.168.136.128/sqli-labs-master/Less-56/?id=1')%23 http://192.168.136.128/sqli-labs- ...

  8. UITableview 兼容IOS6 和IOS7的方法

    1. TableVIew向下拉44像素  添加Auto layout 2. Extended edge 选择Under top bars 2. 在Viewdidload中添加代码 if ([[UIDe ...

  9. privot函数使用

    语法: table_source PIVOT( 聚合函数(value_column) FOR pivot_column IN(<column_list>) ) 将列转化为行 写个小示例 : ...

  10. 用C#在Visual Studio写Javascript单元测试

    1.在vs创建一个标准的单元测试工程 2.引用nuget包:Edge.js 我是用的是6.11.2版本 3.编写JsRunner类 using EdgeJs; using System; using ...