------------(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)