Objective-C中对象分三类
实例对象instance
通过alloc产生
Person *p = [NSObject Person]init];
instance对象内存中存储信息
- 其他成员变量
- isa指针
调用copy 方法,遵循NSCopying具体看copyWithZone
方法怎么实现
结构体的大小必须是最大成员 大小的倍数
class对象
获取类对象
Class class = [p class];//class方法始终返回类对象
Class class1 = object_getClass(p);//传入实例对象
class对象在内存中存储的信息
- isa指针
- superclass指针
- 类的属性描述信息(@property) ,类的对象方法信息(instance method)
- 类的协议信息(Protocol),成员变量描述信息(ivar)
meta-class 元类对象(meta-data 元数据)
获取元类对象
Class meta = object_getClass(class);//传入类对象
class_isMetaClass(meta) //判断是否元类对象
meta-class 在内存中的信息 与class内存结构一样(class类型),作用不一样 有些值为空
- isa指针
- superclass指针
- 类方法信息(class method)
一些方法实现原理
1.Class objc_getClass(const char *aClassName)
- 传入字符串类名
- 返回对应的类对象
2.Class object_getClass(id obj)
- 1> 传入的obj可能是instance对象、class对象、meta-class对象
- 2> 返回值
- a) 如果是instance对象,返回class对象
- b) 如果是class对象,返回meta-class对象
- c) 如果是meta-class对象,返回NSObject(基类)的meta-class对象
3.- (Class)class、+ (Class)class
1> 返回的就是类对象
- (Class) {
return self->isa;
}
+ (Class) {
return self;
}