[英]Dealloc not called on subview with ARC
我有一个不常见的体系结构。 具有一个UIViewController和许多子视图。 我使用viewView和UIViewController之类的UIView进行过渡动画。
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; }
但这有一些问题。
如果实现了dealloc
并且未调用它,那么将保留该实例。 您需要重新考虑对其的强烈引用。
除了实例释放资源外,Dealloc除了执行功能之外也不是一个好地方,因为该实例不再具有完整的功能或处于完整的状态。 像这样: [showView removeFromSuperview];
最好在取消分配之前明确完成。
如@Greg所述,ARC不需要您在dealloc
中执行的大部分或全部操作。 现在,子视图通常weak
因此不需要显式的dealloc。 实际上,根据视图层次结构的拆解顺序,它们可能已经消失。
我已经解决了类似的问题。 在我的Viewcontroller中,我创建了一个NSTimer指针,当我将下面的代码放在“ viewWillDisappear”中时,将调用“ dealloc”。
if (_timer) {
[_timer invalidate];
_timer = nil;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.