关于内存布局的疑问?

来源:7-4 Catory中的方法覆盖问题(二)

夜鸽

2019-07-22

老师我想请教下,既然内存布局已经确定!
1、为什么分类的同名方法又可以拼接到原类的方法前面。
2、根据分类的数据结构可以确定,系统为分类支持了( 实例方法,类方法,实例属性和协议)
3、为什么实例变量不能像添加( 实例方法,类方法,实例属性和协议) 来添加实例变量呢?

非常感谢?

写回答

1回答

逆风

2019-07-27

只要明白一个概念就行了:

1.实例变量占用类对象的空间,一般类对象占用的空间是所有实例变量占用的空间之和。

2.而方法、属性、协议不占用对象空间,比如方法分配在代码区。


类和结构体是类似的。如果要验证的话,你自定义一个C的结构体,里面包含成员变量、成员函数,实例化它,然后用课程中用到的sizeof打印它的尺寸。

其实你想想,如果每个类对象都需要空间来存储方法的话,是不太浪费空间了。所有类对象调用公共位置的方法就行了。

0
0

面试跳槽提升必备 全面解析iOS中的Runtime机制

高薪职位,复杂业务需求,高性能APP,Runtime技术不可不学。

275 学习 · 48 问题

查看课程