1. //------------------------Persion类----------------------------//
    1 #import "Person.h"
  2.  
  3. @implementation Person
  4. + (void)test
  5. {
  6. NSLog(@"调用了test方法");
  7. }
  8.  
  9. // 当程序启动的时候,就会加载一次项目中所有的类。类加载完毕后就会调用+load方法
  10. + (void)load
  11. {
  12. NSLog(@"Person---load");
  13. }
  14.  
  15. // 当第一次使用这个类的时候,就会调用一次+initialize方法
  16. + (void)initialize
  17. {
  18. NSLog(@"Person-initialize");
  19. }
  20.  
  21. @end
  1. //------------------------Student类------------------------//
    1 #import <Foundation/Foundation.h>
  2. #import "Person.h"
  3.  
  4. @interface Student : Person
  5.  
  6. @end
  7.  
  8. #import "Student.h"
  9.  
  10. @implementation Student
  11.  
  12. // 在类被加载的时候调用
  13. + (void)load
  14. {
  15. NSLog(@"Student---load");
  16. }
  17.  
  18. + (void)initialize
  19. {
  20. NSLog(@"Student-initialize");
  21. }
  22.  
  23. @end
  1.  
  2. //-------------------------GoodStudent类-----------------------//
    1 #import "Student.h"
  3.  
  4. @interface GoodStudent : Student
  5.  
  6. @end
  7.  
  8. #import "GoodStudent.h"
  9.  
  10. @implementation GoodStudent
  11. + (void)load
  12. {
  13. NSLog(@"GoodStudent---load");
  14. }
  15.  
  16. + (void)initialize
  17. {
  18. NSLog(@"GoodStudent-initialize");
  19. }
  20.  
  21. @end
  1. //---------------------Persion分类----------------------//
  2.  
  3. 1 #import "Person.h"
  4.  
  5. @interface Person (MJ)
  6.  
  7. @end
  8.  
  9. #import "Person+MJ.h"
  10.  
  11. @implementation Person (MJ)
  12. + (void)load
  13. {
  14. NSLog(@"Person(MJ)---load");
  15. }
  16. + (void)initialize
  17. {
  18. NSLog(@"Person(MJ)-initialize");
  19. }
  20. @end
  1.  
  2. //-------------------------------------测试文件---------------------------------------//
  3.  
  4. 1 #import <Foundation/Foundation.h>
  5. #import "Person.h"
  6. #import "Student.h"
  7. #import "GoodStudent.h"
  8. /*
  9. 1.当程序启动时,就会加载项目中所有的类和分类,而且加载后会调用每个类和分类的+load方法。只会调用一次。
  10.  
  11. 2.当第一次使用某个类时,就会调用当前类的+initialize方法
  12.  
  13. 3.先加载父类,再加载子类(先调用父类的+load方法,再调用子类的+load方法)
  14. 先初始化父类,再初始化子类(先调用父类的+initialize方法,再调用子类的+initialize方法)
  15. */
  16.  
  17. int main()
  18. {
  19. // [[GoodStudent alloc] init];
  20.  
  21. return ;
  22. }
  23.  
  24. void test1()
  25. {
  26. Person *p = [[Person alloc] init];
  27.  
  28. //[Person test];
  29.  
  30. // 内存中的类对象
  31. // 类对象 == 类
  32. Class c = [p class];
  33. [c test];
  34.  
  35. Person *p2 = [[c new] init];
  36.  
  37. NSLog(@"");
  38. }
  39.  
  40. void test()
  41. {
  42. // 利用Person这个类创建了2个Person类型的对象
  43. Person *p = [[Person alloc] init];
  44.  
  45. Person *p2 = [[Person alloc] init];
  46.  
  47. Person *p3 = [[Person alloc] init];
  48.  
  49. // 获取内存中的类对象
  50. Class c = [p class];
  51.  
  52. Class c2 = [p2 class];
  53.  
  54. // 获取内存中的类对象
  55. Class c3 = [Person class];
  56.  
  57. NSLog(@"c=%p, c2=%p, c3=%p", c, c2, c3);
  58.  
  59. // 类本身也是一个对象,是个Class类型的对象,简称类对象
  60.  
  61. /*
  62. 利用Class 创建 Person类对象
  63.  
  64. 利用 Person类对象 创建 Person类型的对象
  65.  
  66. */
  67. }

OC 类对象和类加载的更多相关文章

  1. 五.OC基础--1.多态,2.类对象,3.点语法,4.@property&@synthesize,5.动态类型,内省(判断对象是否遵循特定的协议,以及是否可以响应特定的消息)

    五.OC基础--1.多态, 1. 多态概念,定义:多态就是某一类事物的多种形态: 表现形式: Animal *ani = [Dog new]; 多态条件:1.有继承关系 2.有方法的重写 2.多态代码 ...

  2. OC 类簇与复合

    OC 类簇与复合 类簇: 类簇是Foundation框架中广泛使用的设计模式.类簇将一些私有的.具体的子类组合在一个公共的.抽象的超类下面,以这种方法来组织类可以简化一个面向对象框架的公开架构,而又不 ...

  3. OC 类方法,对象方法,构造方法以及instancetype和id的异同

    OC 类方法,对象方法,构造方法以及instancetype和id的异同 类方法: 类方法是可以直接使用类的引用,不需要实例化就可以直接使用的方法.一般写一些工具方法. 类方法: 声明和实现的时候,以 ...

  4. [BS-21] 关于OC中对象与指针的思考

    关于OC中对象与指针的思考 1. 创建对象: OC中可通过代码Person *p = [[Person alloc] init];创建了一个对象p.该过程中内存情况为: 在当前线程的栈(默认1M)中, ...

  5. OC类的本质,深入探讨,load方法和initialize方法

    1:类的本质:类也是一种类,可以叫做类类,类对象,类类型: 2:类和对象在内存中分配问题(注意区分类的对象和类对象的概念) 类对象在内存中只有一份,且只加载一次,类对象中存放了类中定义的方法: 而成员 ...

  6. 【IOS学习基础】OC类的相关

    几天前突然在别人的类的.m文件中看到这么一句代码:@synthesize xxxx = _xxxx; 当时愣是没理解啥意思,过后才缓过神来发现原来是把一些类的基础知识忘记了,虽然不用过多去深究以前的一 ...

  7. OC中对象拷贝概念

    OC中的对象拷贝概念,这个对于面向对象语言中都会有这种的问题,只是不同的语言有不同的解决方式:C++中有拷贝构造函数,Java中需要实现Cloneable接口,在clone方法中进行操作.但是不过OC ...

  8. 第一个OC类、解析第一个OC程序

    01第一个OC 类 本文目录 • 一.语法简介 • 二.用Xcode创建第一个OC的类 • 三.第一个类的代码解析 • 四.添加成员变量 • 五.添加方法 • 六.跟Java的比较 • 七.创建对象 ...

  9. object-c计划tips-添加到类对象属性

    这个问题从网络包的内容,由于保密问题,我刚才所描述我的业余的想法. 基本的想法: 网络请求,我们应该能够使用基类BaseNetWork, 然后由派生类继承BaseNetWork,并实现一些特殊的方法. ...

随机推荐

  1. 20145334赵文豪《网络攻防》 MSF基础应用

    实践目标 掌握metasploit的基本应用方式 掌握常用的三种攻击方式的思路. 实验要求 一个主动攻击,如ms08_067 一个针对浏览器的攻击,如ms11_050 一个针对客户端的攻击,如Adob ...

  2. bzoj 2118 墨墨的等式 - 图论最短路建模

    墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+…+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及B的取值范围,求出有多少B可以使等式存在非负整数解. Input ...

  3. IDEA Java开发常用插件

    这里只是推荐一下好用的插件,具体的使用方法就不一一详细介绍了. JRebel for IntelliJ 一款热部署插件,只要不是修改了项目的配置文件,用它都可以实现热部署.收费的,破解比较麻烦.不过功 ...

  4. 如何创建自己的python包

    写过python的人都知道python最方便也最牛的地方就是它有无数的第三方lib可以直接拿来使用,可以让编写代码变的更容易. 长用的安装第三方lib的方法有easy_install和pip,这两个的 ...

  5. C# Byte[] 数组操作

    byte[] Strbyte = Encoding.GetEncoding("big5").GetBytes(str);            if (Strbyte.Length ...

  6. Vue项目中使用Vuex + axios发送请求

    本文是受多篇类似博文的影响写成的,内容也大致相同.无意抄袭,只是为了总结出一份自己的经验. 一直以来,在使用Vue进行开发时,每当涉及到前后端交互都是在每个函数中单独的写代码,这样一来加大了工作量,二 ...

  7. 【TCP/IP详解 卷一:协议】第十章 动态选路协议

    更为详细的RIP博客解析: RIP理论 距离向量算法的简介: RIP协议V-D算法的介绍 10.1 引言 静态选路修改路由表的三种方法 (1)主机设置时,默认的路由表项 (2)ICMP重定向报文(默认 ...

  8. BZOJ 1015: [JSOI2008]星球大战starwar(并查集求连通块+离线处理)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1015 题意: 思路:好题啊!!! 这道题目需要离线处理,先把所有要删的点给保存下来,然后逆序加点,这 ...

  9. BZOJ 1010: [HNOI2008]玩具装箱toy(斜率优化dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1010 题意: 思路: 容易得到朴素的递归方程:$dp(i)=min(dp(i),dp(k)+(i-k ...

  10. 【转】Windows Server 2008 R2怎样设置自动登陆

    Windows Server 2008 R2是一款服务器操作系统,提升了虚拟化.系统管理弹性.网络存取方式,以及信息安全等领域的应用,Windows Server 2008 R2也是第一个只提供64位 ...