黑马程序员技术交流社区

标题: 一个关于 对象与类的问题 [打印本页]

作者: 2的狠正经    时间: 2014-4-3 15:15
标题: 一个关于 对象与类的问题
当new一个新对象时, 在新对象的内存中是不是也保存了类方法,
作者: 沙洲冷    时间: 2014-4-3 15:34
当new一个新对象时,类方法保存在类中,当第一次创建对象时,也会为类分配空间来保存方法列表,在新对象的内存中并没有保存类方法,新对象会为成员变量分配内存空间,同时还有一个isa指针,该指针指向该对象对应的类,当调用对象方法时系统会根据isa指针到类中找方法。
作者: 悟中生有    时间: 2014-4-3 15:35
OC中类的对象肯定具有类的方法,这个可以用继承的思想理解。不过类方法的调用是:类名.方法名 调用的。所以对象和类方法应该是并存的,不会有谁包含谁的说法的。
作者: agelessman    时间: 2014-4-3 15:48
Person *p=[Person new];比方说我创建了一个新的对象,假如Person中有很多方法,我新建的这个对象是能够继承父类的所有方法的,但内存中只需要一个isa指针指向Person就行了,所以应该没有保存类方法

作者: 帅哥哥    时间: 2014-4-3 15:49
new一个对象,会在堆中开辟一个空间存放对象的相关数据,但是方法不是直接放在堆中的,JVM对对象中方法的处理简单的说是通过指针,具体的东东还是比较复杂的,你到网上搜“Java对象在堆中的内存结构”可以找到很多东西
作者: 王雪冬    时间: 2014-4-4 05:28
当new一个对象时,会在内存中开辟一段空间,用了存储了具体实例的成员变量,不会存储方法,但是,会有一个指针指向这个类。
作者: 于清扬    时间: 2014-4-4 21:17
当new一个新对象时, 在新对象的内存中是不是也保存了类方法

在实例对象的内存中没有保存类方法,而是一个isa指针指向这个类对象
每个类的方法列表都存储在类对象中
而每个方法都有一个与之对应的SEL类型的对象,根据一个SEL对象就可以找到方法的地址,进而调用方法
注意:我这里说的类对象跟你说的新对象并不是一个东西,实例对象相当于你说的新对象(不知道能不能看懂。。。。)




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2