0

我有一个视图控制器,它实例化了一堆 UIButton 子类并将它们添加到它的 self.view 和一个可变数组中。这些子类又具有指向另一个视图的保留属性。在大多数情况下,view 属性指向 UIButton 子类的超视图(视图控制器的 self.view,它们被添加到其中)。但并非总是如此,也不一定,这就是为什么我使用这个属性而不是继承的 superview 的原因。

我遇到的问题是,当视图控制器的 dealloc 执行时:

- (void)dealloc
{
  [UIBUttonSubClassesArray release];
  [super dealloc];
}

UIButton 子类的 dealloc 没有被调用。因此,这些子类中视图属性的附加版本不会被调用,即使视图控制器被释放,我也会为每个 UIButton 子类泄漏一次视图控制器的视图。

但是,如果我将子类的视图属性设为赋值,这样我就不需要在它们的 dealloc 中调用 release,它们的 dealloc 确实会被调用,即使现在没有引用视图的代码,应用程序也会崩溃。

有任何想法吗?

4

1 回答 1

0

如果您的视图控制器不在保留周期中,您可以通过将按钮中的额外保留属性设置为零来打破其 dealloc(以及其 viewDidUnload 中)的循环。

尽管始终最好不要首先创建保留周期,但我在您的问题中没有看到足够的线索来说明在您的情况下应该如何避免它们。

于 2012-05-10T02:38:42.200 回答