类对象和实例对象

实例对象

NSObject *obj = [[NSObject alloc]init]; obj 就是实例对象,实例对象只存储了成员变量,包括isa指针,但是不包含对象方法,因为每个实例所拥有的方法都是一样的,只需要一份方法就行了,所以方法是不会存放在实例中的

实例对象中存放了成员变量的具体指

类对象:

Class class1 = [obj class];

Class class2 = [NSObject class];//class方法 无论调用多少次  返回的始终是NSObject的class对象

Class class3 = object_getClass(obj);//这个方法如果传的是实例,那返回的就是实例的class对象,如果传的是class对象,那返回的就是元类对象

Class metaClass = object_getClass(class3) //这个 是元类对象

这些都是类对象,这三个类对象都是NSObject的class对象(类对象,每个类在内存中质油一个class对象),所以他们三个在内存地址中的结果也是一样的。

类对象(class对象)在内存中存储的信息主要有:

1、isa指针

2、superclass指针

3、类的属性(@property)、类的对象方法(instance method)

4、类的协议信息(protocol),类的成员变量(ivar)

元类对象包含:

1、isa指针

2、superclass指针

3、类的类方法

判断是不是元类对象:

class_isMetaClass()

获得类对象方法的区别:

1、[NSObject class] 在这个方法获得的就是类对象

2、object_getclass() ,这个方法是根据你传递的对象,去寻找对象的isa指针,所以这个方法中参数如果是实例对象就会返回类对象,如果是类对象的话就会返回元类对象

3\objc_getclass() 这个方法参数是个字符串,系统会根据字符串去寻找对应的类,从而返回该类的类对象

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容