OC对象本质

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;
}

转载于:https://my.oschina.net/roycehe/blog/1822144

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值