NSObjec *obj1 =[NSObject alloc] init];
NSObjec *obj2 =[NSObject alloc] init];
Class objClass1 =[obj1 class];
Class objClass2 =[obj2 class];
Class objClass3 =[NSObject class];
Class objClass4 =object_getClass(obj1);// Runtime API
Class objClass5 =object_getClass(obj2);// Runtime API
b) objClass1 ~ objClass5都是NSObject的class对象(类对象)
c) 它们是同一个对象,每个类在内存中有且只有一个class对象
d) class对象在内存中存储的信息主要包括
1) isa指针
2) superclass指针
3) 类的属性信息(property)4) 类的对象方法信息(instance method)5) 类的协议信息(protocol)6) 类的成员变量信息(ivar)7)null(class method)...
5.meta-class对象(元类对象)
a) 获取元类对象方式
1) Class objMetaClass =object_getClass([NSObject class]);// 将类对象当做参数传入,获得元类对象
b) 那么能不能通过类对象的class来获取呢?
1) 不能
Class objMetaClass2 =object_getClass([NSObject class] class]);// class方法无论你调用多少次返回的一直是class对象,类对象
c) objMetaClass是NSObject的meta-class对象(元类对象)
d) 每个类在内存中有且只有一个meta-class对象
e) 查看Class是否为meta-class
1) BOOL result =class_isMetaClass([NSObject class]);
f) meta-class对象和class对象的内存结构是一样的,但是用途不一样,内存中存储的信息主要包括?(类型都是Class)
1) isa指针
2) superclass指针
3)null(property)4)null(instance method)5)null(protocol)6)null(ivar)7) 类的类方法信息(class method)...
6.几个方法的区别
a) Class objc_getClass(constchar*aClassName)1) 传入字符串类名
2) 返回一个类对象(可以根据类对象找到元类对象)
b) Class object_getClass(id obj){if(obj)return obj->getIsa();elsereturn nil;}1) 传入的obj可能是instance对象,class对象,meta-calss对象
2) 返回值
2.1) 如果是instance对象,返回class对象
2.2) 如果是class对象,返回meta-class对象
2.3) 如果是meta-class对象,返回NSObject(基类)的meta-class对象
c)-(Class)class、+(Class)class;1) 返回的就是类对象
-(Class)class {returnself->isa;}+(Class)class {returnself;}