OC对象的本质 2--(instance对象)实例对象,(class对象)类对象,(meta-class对象)元类对象

------------(instance对象)实例对象

@interface Person : NSObject
{
    @public
    int _age;
}
@property (nonatomic, assign) int height;
@end

@implementation Person

@end

        Person *person1 = [[Person alloc] init];
        person1->_age = 10;
        
        
        Person *person2 = [[Person alloc] init];
        person2->_age = 30;


person1和person2是Person的instance对象,
分别占据着两块不同内存。
instance对象在内存中存储的信息包括:
isa指针,
以及其他成员变量
------------(class对象)类对象

        // instance对象,实例对象
        NSObject *object1 = [[NSObject alloc] init];
        NSObject *object2 = [[NSObject alloc] init];

        Class objectClass1 = [object1 class];
        Class objectClass2 = [object2 class];
        Class objectClass3 = object_getClass(object1);//#import 
        Class objectClass4 = object_getClass(object2);//#import 
        Class objectClass5 = [NSObject class];

objectClass1 ~5都是NSObject的class对象(类对象)
它们是同一个对象;每个类在内存中有且只有一个class对象
class对象在内存中存储的信息包括:
isa指针
superclass指针
类的属性信息(@property)
类的对象的方法信息(instance method)
类的成员变量信息(ivar)
类的协议信息(protocol)
-----------(meta-class对象)元类对象

        // meta-class对象,元类对象
        // 将类对象当做参数传入,获得元类对象
        Class objectClass5 = [NSObject class];
        Class objectMetaClass = object_getClass(objectClass5);//#import 

objectMetaClass 是 NSObject的meta-class对象(元类对象)
每个类在内存中有且只有一个meta-class对象
meta-class对象和class对象内存结构是一样的,但用途不一样
在内存中存储的信息主要包括
isa指针
superclass指针
类的方法信息(class method)

你可能感兴趣的:(OC对象的本质 2--(instance对象)实例对象,(class对象)类对象,(meta-class对象)元类对象)