简体   繁体   English

发布后,Dealloc没有立即调用

[英]Dealloc is not calling immediately after release

I have a root view that loads two view controller. 我有一个加载两个视图控制器的根视图。 eg: FirstVC , SecondVC . 例如: FirstVCSecondVC

I am showing FirstVC as the root view controller when the app launches, on some action on FirstVC I load SecondVC by removing first. 在应用启动时,我将FirstVC显示为根视图控制器,在FirstVC上的某些操作上,我SecondVC删除了SecondVC来加载SecondVC

For loading SecondVC I first remove FirstVC by 为了加载SecondVC我首先通过以下方式删除FirstVC

[FirstVCobj.view removeFromSuperView];  
[FirstVCobj release];
FirstVCobj = nil;

After that I allocate and create SecondVC 之后,我分配并创建SecondVC

Now only after calling SecondVC 's viewdidload() is FirstVC 's dealloc() method called. 现在只能打电话后SecondVCviewdidload()FirstVCdealloc()调用的方法。 Is this the right execution path, or is it due to some mistake I have made? 这是正确的执行路径,还是由于我犯了一些错误? The above is exactly how I remove and create my view controllers. 以上正是我删除和创建视图控制器的方式。

i assume it is a UIView you're talking about. 我认为这是您正在谈论的UIView。


  • addSubview retains the view addSubview保留视图
  • removeFromSuperView releases or AUTORELEASES it -- an implementation detail you don't control removeFromSuperView发布或自动释放它-您无法控制的实现细节

to 'see' it: wrap it in a pool of your own “看”它:将它包装在自己的水池中

@autoreleasepool {
    [FirstVCobj.view removeFromSuperView];  
    [FirstVCobj release];
    FirstVCobj = nil;
}
[FirstVCobj removeFromParentAndCleanup:YES];

检查一下是否可行。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM