OC中的对象

CO中的对象有3种

instance对象(实例对象)

  • instance对象就是通过alloc创建的对象

  • instance对象在内存中存储的信息包括:

    • isa指针
    • 其他成员变量值

class对象(类对象)

  • 下面的objClass 就是类对象,一个类只有一个类对象,通过4种方法获取的类对象都是同一个对象。
#import <objc/runtime.h>
1、通过类方法
Class objClass = [NSObject class];
2、通过对象获取
NSObject *obj = [[NSObject alloc] init];
Class objClass = [obj class];
3、通过runtime的object_getClass获取
Class objClass = object_getClass(obj)
4、通过runtime的objc_getClass获取
Class objClass = objc_getClass("NSObject");
  • class对象在内存中存储的信息主要有:
    • isa指针
    • superclass指针
    • 类的属性信息(@property)
    • 类的对象方法信息(instance method)
    • 类的协议信息(@protocol)
    • 类的成员变量信息(ivar)
    • 其他

meta-class对象(元类对象)

  • 也是一个类对象,每个类也只有一个元类对象(meta-class)。
1、通过runtime 的 object_getClass 方法获取,传入相应的类的class对象(类对象)
Class objMetaClass = object_getClass([NSObject class])
2、通过runtime 的 objc_getMetaClass 方法获取
Class objMetaClass = objc_getMetaClass("NSObject");
3、 可以通过下面方法判断一个对象是否是元类对象
Bool isMetaClass = class_isMetaClass(objMetaClass)
  • meta-class对象和class对象的内存结构是一样的,class对象中的对象方法、成员变量等信息在meta-class对象中为null,但用途不一样
  • meta-class对象在内存中存储的信息主要有:
    • isa指针
    • superclass指针
    • 类的类方法信息(class method)
    • 其他
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容