黑马程序员技术交流社区

标题: oc 继承问题 [打印本页]

作者: 北极星    时间: 2014-3-17 19:15
标题: oc 继承问题
子类继承父类 ,继承的属性是保存在父类的内存中 还是 每个继承的子类都要拷贝一份父类的属性。
作者: 脸皮猴    时间: 2014-3-17 19:32
我觉是这么理解
当用子类创建一个对象以后,这个对象的属性所占的内存等于 父类的属性+子类属性所占的内存,而你说的那个是不是所有子类都要拷贝一份父类的属性,我觉得肯定不是。
作者: 于清扬    时间: 2014-3-31 16:00
如果是通过@property声明的属性默认会生成带下划线的成员变量,setter和getter方法声明和实现。
只有类创建出来的对象才有成员变量,默认是0或者nil。所以成员变量是保存在所创建出来得对象内存中。

而子类继承父类的话,setter和getter的方法的声明和实现会保存在父类(类对象)中,当调用setter或getter方法时首先会根据方法的地址去这个类中找,没有在去父类中找。

作者: 程浩    时间: 2014-4-1 18:47
1.继承的属性是保存在父类的内存中 ,这是肯定不可能的
2.每个继承的子类都要拷贝一份父类的属性。
关于第二点,想想我们的代码,你如何知道子类可以使用父类的代码(方法)?或者说你如何调用自己的方法?
先看看我们如何使用自己的方法:我们在点h文件中声明使用的方法,对不,然后使用的时候去找我们声明了哪些可用的方法(虽然在@implementation中也可以不声明直接写方法的实现,但调用父类的方法肯定是它在@interface中声明的方法,前者默认是@private,后者默认是@protect).
由此我想到,即使我继承了Father类,要想使用Father下面的方法,只需要通过其import的点h文件找找看有哪些可用的方法,而不是把整个父类copy过来.当我使用A方法,我就把Father的A方法放到内存中使用,并不需要事先把父类所有代码都copy到子类。





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