zoukankan      html  css  js  c++  java
  • oc40--类的启动过程

    //
    //  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
  • 相关阅读:
    算法笔记_225:数字密码发生器(Java)
    LVS专题-(1)LVS基本介绍
    Mysql加锁过程详解(7)-初步理解MySQL的gap锁
    java实现二叉树的构建以及3种遍历方法
    java设计模式-菜鸟网络
    数据结构与算法(周鹏-未出版)-第六章 树-习题
    数据结构与算法(周鹏-未出版)-第六章 树-6.5 Huffman 树
    数据结构与算法(周鹏-未出版)-第六章 树-6.4 树、森林
    数据结构与算法(周鹏-未出版)-第六章 树-6.3 二叉树基本操作的实现
    数据结构与算法(周鹏-未出版)-第六章 树-6.2 二叉树
  • 原文地址:https://www.cnblogs.com/yaowen/p/7418320.html
Copyright © 2011-2022 走看看