我努力以非常干净的方式解决涉及内存过载(管理)的问题。 我有一系列视图,包括其他视图,在我的项目中我有这样的情况:
的MainView
| _PageView
| _CustomButton
太好了,很容易就像蛋糕一样。由于某些原因,CustomButton中有一个委托(协议),所以我们在PageView中创建了一个“for循环”,它创建了N个CustomButtons,在PageView(PageVew扩展CustomButtonDelegate中)将委托设置为self,并在附加它们时释放按钮,如{
CustomButton *customButton_ = [[CustomButton alloc] initWithFrame:CGRectMake(100.0,50+(i*55.0),200.0);
customButton.delegate = self;
[self addSubView:customButton_];
[customButton_ release];
}
太远了,太好了。按钮将被按下,PageView获取协议方法,执行一些代码和操作。一个问题是,有一点,MainView必须删除PageView,所以在我调用的方法中
[pageView_ removeFromSuperview];
[pageView release], pageView_ = nil;
pageView_ = [PageView alloc] initWithFrame.....];
我重新创建了要显示的其他数据的对象。 我注意到PageView永远不会被释放并从内存中删除,因为它的retainCount正是我在PageView中创建的CustomButton的数量,并将委托分配给self加上当然。我的问题是,什么是最安全地删除所有对象并且能够删除PageView的最简洁方法,释放内存(因为我加载了大量数据以显示在其中)?
现在我正在做:
在PageView中创建一个NSMutableArray,我将CustomButton中的对象放入其中 它,在删除PageView之前,我循环它并设置委托= nil然后释放 每个对象,在我释放NSMutableArray(称为“持有者”)之后。
但问题是,如果我想用其他协议添加更多不同类型的对象,添加到此数组可能会导致保留对象的其他问题。
我在哪里缺乏知识,所以我需要学习更多(非常肯定我可以说)或者我需要与另一个OOD接触?
谢谢你们,我这个问题已经过载,我的大脑陷入了困境。 :)
答案 0 :(得分:3)
您CustomButton
的委托似乎是retain
的{{1}}属性。代表应该是CustomButton
属性,而不是assign
或retain
。请参阅here。