OC 类对象和类加载
- //------------------------Persion类----------------------------//
1 #import "Person.h"- @implementation Person
- + (void)test
- {
- NSLog(@"调用了test方法");
- }
- // 当程序启动的时候,就会加载一次项目中所有的类。类加载完毕后就会调用+load方法
- + (void)load
- {
- NSLog(@"Person---load");
- }
- // 当第一次使用这个类的时候,就会调用一次+initialize方法
- + (void)initialize
- {
- NSLog(@"Person-initialize");
- }
- @end
- //------------------------Student类------------------------//
1 #import <Foundation/Foundation.h>- #import "Person.h"
- @interface Student : Person
- @end
- #import "Student.h"
- @implementation Student
- // 在类被加载的时候调用
- + (void)load
- {
- NSLog(@"Student---load");
- }
- + (void)initialize
- {
- NSLog(@"Student-initialize");
- }
- @end
- //-------------------------GoodStudent类-----------------------//
1 #import "Student.h"- @interface GoodStudent : Student
- @end
- #import "GoodStudent.h"
- @implementation GoodStudent
- + (void)load
- {
- NSLog(@"GoodStudent---load");
- }
- + (void)initialize
- {
- NSLog(@"GoodStudent-initialize");
- }
- @end
- //---------------------Persion分类----------------------//
- 1 #import "Person.h"
- @interface Person (MJ)
- @end
- #import "Person+MJ.h"
- @implementation Person (MJ)
- + (void)load
- {
- NSLog(@"Person(MJ)---load");
- }
- + (void)initialize
- {
- NSLog(@"Person(MJ)-initialize");
- }
- @end
- //-------------------------------------测试文件---------------------------------------//
- 1 #import <Foundation/Foundation.h>
- #import "Person.h"
- #import "Student.h"
- #import "GoodStudent.h"
- /*
- 1.当程序启动时,就会加载项目中所有的类和分类,而且加载后会调用每个类和分类的+load方法。只会调用一次。
- 2.当第一次使用某个类时,就会调用当前类的+initialize方法
- 3.先加载父类,再加载子类(先调用父类的+load方法,再调用子类的+load方法)
- 先初始化父类,再初始化子类(先调用父类的+initialize方法,再调用子类的+initialize方法)
- */
- int main()
- {
- // [[GoodStudent alloc] init];
- return ;
- }
- void test1()
- {
- Person *p = [[Person alloc] init];
- //[Person test];
- // 内存中的类对象
- // 类对象 == 类
- Class c = [p class];
- [c test];
- Person *p2 = [[c new] init];
- NSLog(@"");
- }
- void test()
- {
- // 利用Person这个类创建了2个Person类型的对象
- Person *p = [[Person alloc] init];
- Person *p2 = [[Person alloc] init];
- Person *p3 = [[Person alloc] init];
- // 获取内存中的类对象
- Class c = [p class];
- Class c2 = [p2 class];
- // 获取内存中的类对象
- Class c3 = [Person class];
- NSLog(@"c=%p, c2=%p, c3=%p", c, c2, c3);
- // 类本身也是一个对象,是个Class类型的对象,简称类对象
- /*
- 利用Class 创建 Person类对象
- 利用 Person类对象 创建 Person类型的对象
- */
- }
OC 类对象和类加载的更多相关文章
- 五.OC基础--1.多态,2.类对象,3.点语法,4.@property&@synthesize,5.动态类型,内省(判断对象是否遵循特定的协议,以及是否可以响应特定的消息)
五.OC基础--1.多态, 1. 多态概念,定义:多态就是某一类事物的多种形态: 表现形式: Animal *ani = [Dog new]; 多态条件:1.有继承关系 2.有方法的重写 2.多态代码 ...
- OC 类簇与复合
OC 类簇与复合 类簇: 类簇是Foundation框架中广泛使用的设计模式.类簇将一些私有的.具体的子类组合在一个公共的.抽象的超类下面,以这种方法来组织类可以简化一个面向对象框架的公开架构,而又不 ...
- OC 类方法,对象方法,构造方法以及instancetype和id的异同
OC 类方法,对象方法,构造方法以及instancetype和id的异同 类方法: 类方法是可以直接使用类的引用,不需要实例化就可以直接使用的方法.一般写一些工具方法. 类方法: 声明和实现的时候,以 ...
- [BS-21] 关于OC中对象与指针的思考
关于OC中对象与指针的思考 1. 创建对象: OC中可通过代码Person *p = [[Person alloc] init];创建了一个对象p.该过程中内存情况为: 在当前线程的栈(默认1M)中, ...
- OC类的本质,深入探讨,load方法和initialize方法
1:类的本质:类也是一种类,可以叫做类类,类对象,类类型: 2:类和对象在内存中分配问题(注意区分类的对象和类对象的概念) 类对象在内存中只有一份,且只加载一次,类对象中存放了类中定义的方法: 而成员 ...
- 【IOS学习基础】OC类的相关
几天前突然在别人的类的.m文件中看到这么一句代码:@synthesize xxxx = _xxxx; 当时愣是没理解啥意思,过后才缓过神来发现原来是把一些类的基础知识忘记了,虽然不用过多去深究以前的一 ...
- OC中对象拷贝概念
OC中的对象拷贝概念,这个对于面向对象语言中都会有这种的问题,只是不同的语言有不同的解决方式:C++中有拷贝构造函数,Java中需要实现Cloneable接口,在clone方法中进行操作.但是不过OC ...
- 第一个OC类、解析第一个OC程序
01第一个OC 类 本文目录 • 一.语法简介 • 二.用Xcode创建第一个OC的类 • 三.第一个类的代码解析 • 四.添加成员变量 • 五.添加方法 • 六.跟Java的比较 • 七.创建对象 ...
- object-c计划tips-添加到类对象属性
这个问题从网络包的内容,由于保密问题,我刚才所描述我的业余的想法. 基本的想法: 网络请求,我们应该能够使用基类BaseNetWork, 然后由派生类继承BaseNetWork,并实现一些特殊的方法. ...
随机推荐
- 20145334赵文豪《网络攻防》 MSF基础应用
实践目标 掌握metasploit的基本应用方式 掌握常用的三种攻击方式的思路. 实验要求 一个主动攻击,如ms08_067 一个针对浏览器的攻击,如ms11_050 一个针对客户端的攻击,如Adob ...
- bzoj 2118 墨墨的等式 - 图论最短路建模
墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+…+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及B的取值范围,求出有多少B可以使等式存在非负整数解. Input ...
- IDEA Java开发常用插件
这里只是推荐一下好用的插件,具体的使用方法就不一一详细介绍了. JRebel for IntelliJ 一款热部署插件,只要不是修改了项目的配置文件,用它都可以实现热部署.收费的,破解比较麻烦.不过功 ...
- 如何创建自己的python包
写过python的人都知道python最方便也最牛的地方就是它有无数的第三方lib可以直接拿来使用,可以让编写代码变的更容易. 长用的安装第三方lib的方法有easy_install和pip,这两个的 ...
- C# Byte[] 数组操作
byte[] Strbyte = Encoding.GetEncoding("big5").GetBytes(str); if (Strbyte.Length ...
- Vue项目中使用Vuex + axios发送请求
本文是受多篇类似博文的影响写成的,内容也大致相同.无意抄袭,只是为了总结出一份自己的经验. 一直以来,在使用Vue进行开发时,每当涉及到前后端交互都是在每个函数中单独的写代码,这样一来加大了工作量,二 ...
- 【TCP/IP详解 卷一:协议】第十章 动态选路协议
更为详细的RIP博客解析: RIP理论 距离向量算法的简介: RIP协议V-D算法的介绍 10.1 引言 静态选路修改路由表的三种方法 (1)主机设置时,默认的路由表项 (2)ICMP重定向报文(默认 ...
- BZOJ 1015: [JSOI2008]星球大战starwar(并查集求连通块+离线处理)
http://www.lydsy.com/JudgeOnline/problem.php?id=1015 题意: 思路:好题啊!!! 这道题目需要离线处理,先把所有要删的点给保存下来,然后逆序加点,这 ...
- BZOJ 1010: [HNOI2008]玩具装箱toy(斜率优化dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1010 题意: 思路: 容易得到朴素的递归方程:$dp(i)=min(dp(i),dp(k)+(i-k ...
- 【转】Windows Server 2008 R2怎样设置自动登陆
Windows Server 2008 R2是一款服务器操作系统,提升了虚拟化.系统管理弹性.网络存取方式,以及信息安全等领域的应用,Windows Server 2008 R2也是第一个只提供64位 ...