未调用UIViewController-dealloc方法

我正在使用自动引用计数。 我有一个自定义的UIViewController子类,每当我调用-presentViewController: animated:completion:或从-presentViewController: animated:completion:视图中删除它的视图我想NSLog东西像“我dealloced”,所以我知道视图控制器已被成功删除。 我在我的视图控制器中实现了-dealloc方法。 然而,我开始了一个testing项目,我刚刚有两个UIViewController实例(没有保留周期)和-dealloc不调用或者当我推动第二个UIViewController模态或当我删除超级视图或当我从父视图控制器中删除它。 我错过了什么吗? 在我原来的项目(不是testing案例)中,乐器向我展示了那些控制器留下的内存空间,我无法摆脱。

如果你想切换视图控制器,并让你正在切换远离,那么只需切换窗口的根视图控制器。 所以,如果你在VC1中,并且想要去VC2,那么在VC1中这样做:

 VC2 *vc2 = [[VC2 alloc] init]; // or however else is appropriate to get an instance of this class self.view.window.rootViewController = vc2; 

如果您还没有创build任何属性指向vc1,那么在进行此切换后,它将被释放。

如果要使用模式表示或模式切换(在切换控制器时获取animation),仍然可以通过从vc2的viewDidAppear方法演示之后切换根视图控制器来取消分配初始控制器:

 -(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; self.view.window.rootViewController = self; } 

为了在View Controller被取消分配时得到一个打印,你可以实现dealloc方法

 - (void) dealloc { NSLog(@"The instance of MyViewController was deallocated"); } 

然后在View Controller离开可以实现的视图时获得打印

 - (void) viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; NSLog(@"The instance of MyViewController left the main view") } 

如果使用-presentViewController:animated:completion:每次调用此方法时都保留parentViewController。 ModalViewController只是简单的推到了另一个ViewController之上。

ModalViewControllers只是为某种信息/用户input而devise的。 如果你想dealloc的ParentViewController你必须处理你自己的实现。

当类被保留(或者这个类中的东西被保留)并且不被释放时,dealloc方法不被调用。 对于既有ARC又没有的项目,这是公正的。 所以请检查你的代码两次。