子类化内存分配问题

时间:2011-09-20 01:48:01

标签: objective-c cocos2d-iphone objective-c++

我有一个关于使用对象继承类的基本问题:

@interface Myclass:NSObject {

UIImage *图片; NSString * string; ParticleSystem *系统; 对象* obj; Object2 * obj2; }

如果我将这个MyClass类子类化,并且我只初始化了超类头中定义的这些对象中的一些,那么就内存而言,所有其他未分配的定义会发生什么? 我问的原因是,我有一个有很多很多定义的类,为了简单起见我一直在继承它,但是我的子类只需要这些定义的一小部分。

是否值得继承NSObject并重新定义所需的变量而不是继承MyObject?

谢谢, 奥利弗。

3 个答案:

答案 0 :(得分:2)

它们占用空间,但每个变量只有一个指针值(iPhone上有4个字节)。

将这些分成不同类别的更好理由是,听起来你没有非常清晰的责任分工。类应该由对该数据的一些逻辑数据分组和操作组成。与班级角色无关的事情可能属于其他地方。

答案 1 :(得分:2)

这些变量中的每一个都是一个指针,因此它们占用了指向内存地址所需的存储空间。 (iPhone上4个字节)

Is iPhone OS 64 bit or 32 bit?

如果每个子类只需要一个小子集,那么只包括基类中的子类(而不是复制和重新定义每个类中的子类)。如果其中一些子类需要完整集,那么您还可以拥有类层次结构(分层子类)。没有看到具体的设计就不可能知道。

答案 2 :(得分:1)

如果您只是在类定义中有指针(例如,SomeClassName* somePointerName;),则每个指针在每个对象中占据一个指针位置(iPhone上为4个字节)。

虽然偶尔做你正在做的事很方便,但是你错过了面向对象编程的许多好处 - 你基本上只是在编写cruddy C时使用Objective-C的存储管理。