我有一个视图控制器,它实例化了一堆UIButton子类,并将它们添加到self.view和一个可变数组中。这些子类又具有指向另一个视图的retain属性。在大多数情况下,view属性指向UIButton子类的superview(视图控制器的self.view,它们被添加到它们)。但并不总是也不一定,这就是我使用这个属性而不是继承的superview的原因。
我遇到的问题是当视图控制器的dealloc执行时:
- (void)dealloc
{
[UIBUttonSubClassesArray release];
[super dealloc];
}
未调用UIButton子类的dealloc。因此,不会调用这些子类中view属性的附加版本,即使取消分配视图控制器,我也会为每个UIButton子类泄漏一次视图控制器的视图。
但是,如果相反我将子类的view属性设置为assign,这样我就不需要在dealloc中调用release,他们的dealloc会被调用,即使现在没有代码引用该视图,应用程序也会崩溃。
有什么想法吗?
答案 0 :(得分:0)
如果你的viewcontroller不在保留周期中,你可以通过将按钮中的额外保留属性设置为nil来打破其dealloc(以及它的viewDidUnload)中的循环。
虽然最好不要首先创建保留周期,但我没有在你的问题中看到足够的线索,说明在你的情况下应该如何避免它们。