iOS:在ViewDidDemove中销毁子视图?

iOS:在ViewDidDemove中销毁子视图?,ios,automatic-ref-counting,Ios,Automatic Ref Counting,我有一个UINavigationController,上面推着一个UIViewController。在我的viewControllersview中,我有两个子视图UIScrollViews。我每次在视图中重新创建这些scrollviews时,都会在我的viewController中出现方法,并将它们作为子视图添加到我的viewController视图中。我正在使用ARC,是否应该销毁viewdiddemouse方法中的两个滚动视图?内存使用的最佳实践是什么 编辑:我做了一些调查,没有删除滚动视图

我有一个
UINavigationController
,上面推着一个
UIViewController
。在我的
viewController
s
view
中,我有两个子视图
UIScrollView
s。我每次在
视图中重新创建这些
scrollview
s时,都会在我的
viewController
中出现
方法,并将它们作为子视图添加到我的viewController视图中。我正在使用ARC,是否应该销毁
viewdiddemouse
方法中的两个滚动视图?内存使用的最佳实践是什么



编辑:我做了一些调查,没有删除滚动视图并在
viewdiddemouse
方法中将它们设置为nil,它们不会被释放。调用
viewwillbeen
时,viewcontroller的视图将获得越来越多的子视图。正如我在评论中提到的,我从未解除分配我的主viewcontroller。它始终保留在导航控制器的堆栈上。为什么必须手动释放滚动视图?

可能根本不需要执行任何操作。如果您的UIViewController已从屏幕上删除,然后正在解除分配,它将自动解除分配其视图层次结构(包括您添加的子视图)。检查这一点的一个简单方法是覆盖您感兴趣的类的
dealloc
方法(使用添加到类中的ObjC Category方法),并记录一条消息以指示它们已被删除。

可能根本不需要执行任何操作。如果您的UIViewController已从屏幕上删除,然后正在解除分配,它将自动解除分配其视图层次结构(包括您添加的子视图)。检查这一点的一个简单方法是覆盖您感兴趣的类的
dealloc
方法(使用添加到类中的ObjC Category方法),并记录一条消息以指示它们已被删除。

只需将指向子视图的指针设置为
nil
。ARC会处理的,这就是ARC背后的想法。对不起,这就是我的意思。我正在这样做,我想知道这是否有必要。如果你的应用程序是一个大量消耗资源的应用程序,这是必要的。通常在弹出视图时,不会看到任何子视图,因此没有必要将它们保存在内存中。如果您需要再次查看这些内容,请重新分配它们。这是一个很好的实践(如果你的superview被解除分配,它们将被解除分配)。这取决于。请显示分配滚动视图的代码。你不会破坏它们,只是从超级视图中删除。每次调用视图时,你都可以判断滚动是否为零,如果不是,你就不需要重建它。但是如果你真的想删除它,我想你可以将它设置为nil或者从它的超视图中删除它,只要将指向子视图的指针设置为
nil
。ARC会处理的,这就是ARC背后的想法。对不起,这就是我的意思。我正在这样做,我想知道这是否有必要。如果你的应用程序是一个大量消耗资源的应用程序,这是必要的。通常在弹出视图时,不会看到任何子视图,因此没有必要将它们保存在内存中。如果您需要再次查看这些内容,请重新分配它们。这是一个很好的实践(如果你的superview被解除分配,它们将被解除分配)。这取决于。请显示分配滚动视图的代码。你不会破坏它们,只是从超级视图中删除。每次调用视图时,你都可以判断滚动是否为零,如果不是,你就不需要重建它。但是如果你真的想删除它,我想你可以把它设为零或者从它的超视场中删除它——他用的是圆弧。您是否可以覆盖
dealloc
?我是说。。。他能调用它吗?你自己从来不调用
dealloc
,是的,你可以重写它。ARC会帮他打电话的。谢谢,我不知道会自动打电话。出于某种原因,我认为还有另一个隐藏的方法可以解除分配。更具体地说,当视图控制器解除分配时,它将释放其视图层次结构。当且仅当这些视图上没有其他保留时(不包括控制器的IVAR,因为它们也已释放),这将取消分配视图层次结构。这是正常情况,所以一般来说,@Idles是完全正确的。但是,如果系统的其他部分在视图控制器的视图上保留了视图(这通常是不好的做法),则视图将不会被解除分配。我的视图控制器永远不会被删除。我将其他视图控制器推到顶部,但主视图控制器从未被移除。他使用的是ARC。您是否可以覆盖
dealloc
?我是说。。。他能调用它吗?你自己从来不调用
dealloc
,是的,你可以重写它。ARC会帮他打电话的。谢谢,我不知道会自动打电话。出于某种原因,我认为还有另一个隐藏的方法可以解除分配。更具体地说,当视图控制器解除分配时,它将释放其视图层次结构。当且仅当这些视图上没有其他保留时(不包括控制器的IVAR,因为它们也已释放),这将取消分配视图层次结构。这是正常情况,所以一般来说,@Idles是完全正确的。但是,如果系统的其他部分在视图控制器的视图上保留了视图(这通常是不好的做法),则视图将不会被解除分配。我的视图控制器永远不会被删除。我将其他viewcontroller推到顶部,但从未移除主viewcontroller。