Obj-c:从另一个对象分配一个子类对象并释放

Posted

技术标签:

【中文标题】Obj-c:从另一个对象分配一个子类对象并释放【英文标题】:Obj-c: Allocating a subclassed object from another object and releasing 【发布时间】:2014-05-29 16:54:11 【问题描述】:

在使用 Instruments 分析我的应用时,我发现我分配的数组存在泄漏。据我所知,我这样做是正确的,但看起来有问题。

假设我有三个班,M班,A班和B班。

子类 B 有一个独特的 NSArray 属性,它不属于它的超类 A。 M 分配子类 B 的实例。 在类 M 中,访问子类 B 的实例,并从该类访问和分配 NSArray 属性。 在子类 B 中,dealloc 被覆盖,并为 NSArray 提供了一个 release,而 super dealloc 在它之下。 当我发布 M 类时,我得到 NSArray 对象的泄漏。

我的理解是我能够从类 M 中分配 NSArray 对象,例如:

tempClassB.myNSArray = [[NSArray alloc] initWithArray:finalArray];

而且我可以覆盖子类 B 中的 dealloc 以释放它自己的对象,该对象在它的超类 A 中不存在。我可以调用 super dealloc 来调用类 A 中的 dealloc:

- (void) dealloc

    [myNSArray release];

    [super dealloc];


【问题讨论】:

【参考方案1】:

我遇到的问题是在 M 类中分配 B 类将使 M 类负责释放它。我应该在 B 类中分配对象并像我一样释放,或者在 M 类的对象的 dealloc 中释放。

【讨论】:

以上是关于Obj-c:从另一个对象分配一个子类对象并释放的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法检索分配给 TableLayout 对象的变量名称以从另一个对象中识别?

NSMutableRequest 对象主体的分配数据未释放

对象分配及其释放

检测基类对指向派生类的引用的分配

在哪里释放动态分配的 TFrame 组件的对象?

如果分配该数组引发异常,你应该释放一个数组吗?