A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 2的狠正经 中级黑马   /  2014-4-3 15:15  /  1176 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

当new一个新对象时, 在新对象的内存中是不是也保存了类方法,

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

6 个回复

倒序浏览
沙洲冷 来自手机 中级黑马 2014-4-3 15:34:58
沙发
当new一个新对象时,类方法保存在类中,当第一次创建对象时,也会为类分配空间来保存方法列表,在新对象的内存中并没有保存类方法,新对象会为成员变量分配内存空间,同时还有一个isa指针,该指针指向该对象对应的类,当调用对象方法时系统会根据isa指针到类中找方法。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
OC中类的对象肯定具有类的方法,这个可以用继承的思想理解。不过类方法的调用是:类名.方法名 调用的。所以对象和类方法应该是并存的,不会有谁包含谁的说法的。
回复 使用道具 举报
Person *p=[Person new];比方说我创建了一个新的对象,假如Person中有很多方法,我新建的这个对象是能够继承父类的所有方法的,但内存中只需要一个isa指针指向Person就行了,所以应该没有保存类方法
回复 使用道具 举报
new一个对象,会在堆中开辟一个空间存放对象的相关数据,但是方法不是直接放在堆中的,JVM对对象中方法的处理简单的说是通过指针,具体的东东还是比较复杂的,你到网上搜“Java对象在堆中的内存结构”可以找到很多东西

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
当new一个对象时,会在内存中开辟一段空间,用了存储了具体实例的成员变量,不会存储方法,但是,会有一个指针指向这个类。
回复 使用道具 举报
当new一个新对象时, 在新对象的内存中是不是也保存了类方法

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

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马