未调用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又没有的项目,这是公正的。 所以请检查你的代码两次。