虚线是isa的指向,实线是继承关系。

//
// main.m
// 类的本质 #import <Foundation/Foundation.h>
#import "Person.h"
#import "Car.h"
void demo(Class c); int main(int argc, const char * argv[]) {
/*
类其实也是一个对象, 这个类对象会在这个类第一次被使用的时候创建。
只要有了类对象, 将来就可以通过类对象来创建实例对象。
实例对象中有一个isa指针, 指向创建自己的类对象。 类对象中保存了当前对象所有的"对象方法"。
当给一个实例对象发送消息的时候, 会根据实例对象中的isa指针去对应的类对象中查找。
*/ Person *p = [[Person alloc] init]; //Person的代码存在代码区(程序一启动就有了,还没有用它)。用到Person的时候就会根据代码区的代码在"堆"中创建一个Person类对象(有属性和对象方法列表,也有一个isa指针,指向Person的元类对象。元类对象里面存的是类方法,元类对象也有isa指针。指向根元类对象,有new方法isa指针,指向自己,就是NSObject)。alloc的时候会创建一个在"堆"中的实例对象,并且有一个isa指针指向类对象(属性赋值为0)。init的时候返回地址给"栈"的变量。
[p setAge:];
[Person test]; // 1.如何获取类对象
// [实例对象 class]; [类名 class];
Person *p1 = [[Person alloc] init];
Person *p2 = [[Person alloc] init];
// 一个类再内存中只有一份类对象,是Class类型。
Class c1 = [p1 class]; //*不要
Class c2 = [p2 class];
Class c3 = [Person class];
NSLog(@"c1 = %p, c2 = %p, c3 = %p", c1, c2, c3);//c1 = 0x100004790, c2 = 0x100004790, c3 = 0x100004790 // 2.类对象的应用场景 // 2.1用于创建实例对象
Person *p3 = [[c1 alloc] init];
p3.age = ;
NSLog(@"%i", p3.age); // 2.2用于调用类方法,类对象可以调用类方法。
[Person test];
[c1 test]; //2.3 作为函数参数
demo(c1); //<Person: 0x1004042c0>
demo([Car class]);//<Car: 0x1004042c0>
return ;
} void demo(Class c) //传什么类型的类就可以创建什么类型的对象
{
id obj = [[c alloc] init];
NSLog(@"%@", obj);
}

最新文章

  1. Java MD5机密算法的使用
  2. Android—9.png的制作和去除黑线
  3. newInstance()和new()
  4. 写了好多次SSH现在对于框架还是有一定的基础了,但是对于框架下我们该如何进行操作呢???
  5. linux笔记二-----目录及文件命令
  6. google应用商店的解决
  7. ASP.NET运行机制原理 ---浏览器与IIS的交互过程 自己学习 网上查了下别人写的总结的很好 就转过来了 和自己写的还好里嘻嘻
  8. ngrok 2016版
  9. C# div布局
  10. sql中select语句的逻辑执行顺序
  11. AVL树----java
  12. mysql:Linux系统下mysql5.6的安装卸载
  13. jsoup 使用总结3--高级用法之 not
  14. [转]Windows下Python多版本共存
  15. UOJ#62. 【UR #5】怎样跑得更快 数论 莫比乌斯反演
  16. 《linux就该这么学》第八节课:第六章存储结构与磁盘划分
  17. 记一次线上bug排查-quartz线程调度相关
  18. FP数据库配置文件
  19. Kaggle:Home Credit Default Risk 特征工程构建及可视化(2)
  20. Jmeter录制脚本过程及Could not create script recorder报错、您的连接不是私密连接报错

热门文章

  1. 安卓发送图片文字,java后台接收
  2. sql server 大数据跨服务器迁移表数据——使用链接服务器
  3. 转:selenium自动化脚本错误总结
  4. (转)Hibernate快速入门
  5. 字符串str
  6. vue 打印 页面特定部分转pdf
  7. Python基础-while奇数和
  8. 338. Counting Bits(动态规划)
  9. net Core 中定时任务的设置
  10. http长链接问题