zoukankan      html  css  js  c++  java
  • OC类的本质,深入探讨,load方法和initialize方法

      1:类的本质:类也是一种类,可以叫做类类,类对象,类类型;

      2:类和对象在内存中分配问题(注意区分类的对象和类对象的概念

        类对象在内存中只有一份,且只加载一次,类对象中存放了类中定义的方法;

        而成员变量和isa指针,存放在了类的对象中;isa指针指向了类对象;如图:

        

      3:类本身也是对象,是class类型的对象;

        

    // 以person为例
    
    Person *p1 = [[Person alloc] init];
    Person *p1 = [[Person alloc] init];
    
    // 获取类对象
    // 1:通过对象获取
    class c1 = [p1 class];
    class c2 = [p2 class];
    
    // 2:通过类获取
    class c3 = [Person class];
    
    NSLog(@"c1=%p, c2=%p, c3=%p", c1, c2, c3);
    // 因为类对象在内存中只有一份,所以c1 c2 c3是同一个;

      拿到类对象后可以调用类方法,上边的c1 c2 c3都是Person,都可以调用类方法;

      4:load方法和initialize方法:

        load:当程序启动,就会加载项目中所有的类,类加载完,就会调用load方法,只会调用一次,load方法不管是分类还是原来类,都要加载;只要是类就得加载;

        initialize:当类第一次使用时会调用该方法,且调用一次;也可以把该方法看做是类的初始化(注意不是对象的初始化)方法,因为类只初始化一次,所以该方法也    就只执行一次;如果一个类没有被调用,则不会被调用;

        initialize:他和load方法不同,load方法不管是分类还是原来类,子类父类,只要是类都要load,而initialize则不同,如果原来类和分类中都有initialize方法,    则会优先用分类中的initialize方法,且只调用分类中的initialize方法,原来类的initialize方法就补调用了;只有当分类中没有定义initialize方法时才会调用原来类    中的initialize方法;

  • 相关阅读:
    前端之 http
    事务、存储、索引与慢查询及数据库设计的三大范式
    Navcat 软件使用及 pymysql模块
    MySQL单表查询与多表查询
    IO 模型
    Unable to round-trip http request to upstream: read tcp 192.168.xx.xxx:xxxxx->xx.xxx.xxx.x:xxx: read: operation timed out
    恶补计算机基础知识(一)
    2020 年终总结
    自我总结Java并发编程基础篇(一)
    jvm系列(三):GC算法、垃圾收集器
  • 原文地址:https://www.cnblogs.com/cxbblog/p/3721314.html
Copyright © 2011-2022 走看看