Viewcontroller Dealloc方法永远不会被调用

问题描述:

我知道有这样的问题很多。我读了所有。我的问题很简单。Viewcontroller Dealloc方法永远不会被调用

我从xcode文件>新建项目>单一视图应用程序创建了单一视图应用程序。 然后,我在故事板和一个名为secondViewController的新viewcontroller类中添加了第二个uiviewcontroller。我将一个按钮拖到主视图控制器,并通过ctrl +拖动到故事板上的secondViewController。我在secondViewController中做了相反的处理。并且用nslog添加dealloc functins到类文件。我还添加了对uibuttons的弱引用

视图更改时,每个viewcontroller的Dealloc方法都不会被调用。

ViewController.m

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    NSLog(@"viewDidLoad 1"); 
     // Do any additional setup after loading the view, typically from a nib. 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (void)dealloc { 
    NSLog(@"dealloc 1"); 
} 

SeconViewController.m

#import "SecondViewController.h" 

@interface SecondViewController() 

@end 

@implementation SecondViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (void)dealloc { 
    NSLog(@"dealloc 2"); 

} 
@end 

ARC启用。

僵尸似乎在产品>编辑方案上被禁用。我正在使用xcode 6.2。在乐器分配屏幕中,每次切换都会增加内存。

什么问题,我找不到?

+0

当视图控制器驳回了视图控制器的dealloc只调用。所以你的主视图控制器永远不会被释放。如果你有两个视图控制器,那么你没有一个单一的视图应用程序。如果你有按钮和两个视图控制器,你怎么能不碰初始代码?提供相关细节或者没有人可以帮助你。 – rmaddy

+0

很好,但问题是什么?如果你离开这个视图控制器(弹出它,或解散它),并且它的dealloc没有被调用,你有一个保留周期和内存泄漏,你需要修复它。如果你不愿意谈论具体的代码,你期望在这里得到什么样的帮助? – matt

+0

对不起,我会尽我所能。我编辑了这个问题。 @rmaddy –

当对象的(这里是它的viewcontroller对象)从内存中滑出时,dealloc调用。但在这种情况下,您必须呈现视图控制器才能调用viewwilldisappear并且diddisappear。

在故事板,如果你想从内存中完全删除这些视图控制器ü应该呼吁放松赛格瑞

+0

非常感谢。它适用于secondViewController。有没有办法让它适用于主视图控制器? –

+0

但你为什么要这么做。因为你的应用程序中会随时出现一个视图控制器。你能解释一下确切的场景吗? – va05

+0

我实际上并不需要。只是好奇:)再次感谢,拯救了我的生命 –