A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© AGHM0312 中级黑马   /  2015-12-8 21:57  /  1079 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
本质上还是一个对象.叫类对象.这个对象的类型:Class
类对象是在程序启动的时候加载的,与对象创建无关.
加载的标志:是load方法.
对象是在它被创建的时候加载的.且必须在类对象加载完成后才会加载.
对象加载会执行initialize方法. 只会在对象第一次创建的时候执行.
init :构造方法
构造方法是在对象被创建的时候执行的.对象每次创建都会执行.
注意:
1.一个类的实例对象被创建,则其父类的对象也会被创建.(直接或间接父类都会被创建)
2.分类的load方法不会覆盖主类的.主类与分类的load方法在程序启动的时候都会执行.
*/
类对象只有一个
Class c=[am class];
//    Class c2=[am2 class];
//    Class c3=[Animal class];
1,类是什么
类的本质其实也是一个对象(类对象);
类对象
1,类对象在程序运行时一直存在。
2,类对象是一种数据结构,存储类的基本信息:类大小,类名称,类的版本以及消息与函数的映射表等
3,每一个对象都包含一个指向其类对象的isa指针。

2、类对象如何获取
通过实例对象获取
Dog *d1 = [Dog new];
Dog *d2 = [Dog new];
Class c =   [d1 class];
Class c2 = [d2 class];
通过类名获取(类名其实就是类对象)
Class c3 = [ Dog  class ];
因为类对象在整个程序中只存在一份,
所以 c = c2 = c3
3.类对象的使用,如何使用
1)可以用来调用类方法 :
//获取类对象
Class c1 = [Person class];
//使用类对象调用类方法
[c1 test]; // test是一个+号方法
2)可以用来实例化实例对象, 并且调用对象方法
//获取类对象
Class c1 = [Person class];
//使用类对象创建实例对象
Person *p = [c1 new];
[p test];  // -test 调用对象方法
4. 类对象存储细节
通过打印地址分析测试:类对象存在数据段;

SEL类型
SEL是一种新的数据类型。和id、class一样。
Person *p = [Person new];
SEL s1 = @selector(test);
[p performSelector:s1];



5 个回复

倒序浏览
支持支持
回复 使用道具 举报
看不懂啊,先评论!
回复 使用道具 举报
学习学习
回复 使用道具 举报
支持支持
回复 使用道具 举报
支持,支持,我同意
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马