我有一个不常见的架构。有一个UIViewController和许多子视图。我使用UIView,如viewController和UIViewController进行过渡动画。
UIView有很多子视图,我在主窗口上推,我removeFromSuperview,一切正常,但子视图不调用dealloc方法。我也尝试清理对象
- (void) dealloc { NSLog(@"ActivityShowVC dealloc"); [showView removeFromSuperview]; showView = nil; }
这叫做。
- (void) dealloc { NSLog(@"ActivityShowView dealloc"); [mainScroll removeFromSuperview]; [titleView setDelegate:nil]; [titleView removeFromSuperview]; titleView = nil; [photoView setDelegate:nil]; [photoView removeFromSuperview]; photoView = nil; [predictionView setDelegate:nil]; [predictionView removeFromSuperview]; predictionView = nil; [calendarView setDelegate:nil]; [calendarView removeFromSuperview]; calendarView = nil; [descriptionView setDelegate:nil]; [descriptionView removeFromSuperview]; descriptionView = nil; }
但这有一些问题。
答案 0 :(得分:5)
如果dealloc
已实现且未被调用,则会保留实例。你需要重新考虑对它的强烈引用。
除了释放资源之外,Dealloc不是做任何其他事情的好地方,因为实例不再完全正常,也不是完整状态。在重新分配之前,最好明确地执行以下操作:[showView removeFromSuperview];
。
正如@Greg所说,在ARC下不需要dealloc
中的大部分或全部内容。子视图现在通常为weak
,因此不需要明确的dealloc。实际上,它们可能已经消失,具体取决于视图层次结构的拆卸顺序。
答案 1 :(得分:2)
我已经解决了类似的问题。在我的Viewcontroller中,我创建了一个NSTimer指针,当我将下面的代码放在' viewWillDisappear' dealloc'被称为。
if (_timer) {
[_timer invalidate];
_timer = nil;
}