关于内存布局的疑问?
来源:7-4 Catory中的方法覆盖问题(二)
夜鸽
2019-07-22
老师我想请教下,既然内存布局已经确定!
1、为什么分类的同名方法又可以拼接到原类的方法前面。
2、根据分类的数据结构可以确定,系统为分类支持了( 实例方法,类方法,实例属性和协议)
3、为什么实例变量不能像添加( 实例方法,类方法,实例属性和协议) 来添加实例变量呢?
非常感谢?
写回答
1回答
-
逆风
2019-07-27
只要明白一个概念就行了:
1.实例变量占用类对象的空间,一般类对象占用的空间是所有实例变量占用的空间之和。
2.而方法、属性、协议不占用对象空间,比如方法分配在代码区。
类和结构体是类似的。如果要验证的话,你自定义一个C的结构体,里面包含成员变量、成员函数,实例化它,然后用课程中用到的sizeof打印它的尺寸。
其实你想想,如果每个类对象都需要空间来存储方法的话,是不太浪费空间了。所有类对象调用公共位置的方法就行了。
00
相似问题