【发布时间】:2013-02-20 19:31:39
【问题描述】:
我有一个基于导航的应用程序,我在我的应用程序中疯狂地使用 MBProgressHud。当 ARC 发布时,我转换为 ARC,我经历了很多应用程序崩溃,我不明白为什么。我开始使用分析工具,发现我的内存消耗已经达到顶峰。我进入了我所有的视图控制器并重载了它们的 dealloc 方法,以包括一个写到 NSLog 来告诉我它们是否被释放。令我惊讶的是,使用 MBProgressHUD 的 ViewController 都没有被释放。
我这样调用 MBProgressHUD:
HUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];
[self.navigationController.view addSubview:HUD];
HUD.delegate = self;
HUD.labelText = @"Retrieving Signature";
[HUD showWhileExecuting:@selector(getSignature) onTarget:self withObject:nil animated:YES];
【问题讨论】:
-
出于好奇,您预计它们何时会被释放?当您转到上一个视图时,或者只是当您调用 pop 方法时?
-
当我调用 pop 方法时。当您使用 poptoviewcontroller 方法时,问题会变得更大,因为它可能导致当前视图控制器和您要弹出的视图控制器之间的所有视图控制器都没有被释放。
-
我认为 poptoviewcontroller 不会或不应该取消分配,主要是出于可重用性和内存性能的原因。无论如何,您是否持有对该控制器的其他引用?
-
没有其他对控制器的引用,因此它必须在从堆栈中弹出时被释放,否则它位于内存中并且在应用程序终止之前不会被销毁。
标签: objective-c automatic-ref-counting