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

时间:2014-05-29 16:54:12

标签: object subclass release dealloc alloc

在使用Instruments分析我的应用程序时,我发现了我分配的数组泄漏。据我所知,我正确地做到了这一点,但看起来有些不对劲。

我们说我有三个班,M,A和B班。

  • 子类B具有唯一的NSArray属性,该属性不属于它的超级A类。
  • M分配子类B的实例和实例。
  • 在类M中,访问子类B的实例,并从该类访问NSArray属性并进行分配。
  • 在子类B中,dealloc被覆盖并且具有NSArray的发行版,并且在其下面存在super dealloc。
  • 当我发布M类时,我得到了NSArray对象的泄漏。

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

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

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

- (void) dealloc{

    [myNSArray release];

    [super dealloc];

}

1 个答案:

答案 0 :(得分:0)

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