navigationController和泄漏

时间:2011-06-23 00:15:16

标签: objective-c ios

我使用了仪器工具,它告诉我没有内存泄漏。但我正在努力解决它背后的逻辑。为什么这不会泄漏?似乎幕后发生了一些魔法,我的AppDelegate正在使用我分配的navController来设置self.navigationController的属性。没有我的初始化,我的财产是零。 我不应该被迫制作委托的这些实例变量,然后在dealloc中释放它们吗?为什么这不是泄漏?或者我使用仪器工具错了?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

      // two alloc calls which would imply I need a release 
  UINavigationController *navController = [[UINavigationController alloc] init];
  UIViewController *calcController = [[CalculatorViewController alloc] init];

  [navController pushViewController:calcController animated:YES];

  [window addSubview:navController.view];
  [window makeKeyAndVisible];

      // can not release here, if i do, no views show up
      // [navController release];
      // [calcController release];

      return YES;
}
...
// NOTE: No dealloc for navController or calcController
- (void)dealloc {
   [window release];
   [super dealloc];
}

2 个答案:

答案 0 :(得分:1)

程序的生命周期中都存在navControllercalcController。当程序终止时,一切都被清除,所以没关系。你确实有泄漏,但是无关紧要。

答案 1 :(得分:0)

由于您的应用程序委托在应用程序运行期间存在,因此您只能在应用程序退出之前看到内存泄漏。因此,虽然技术上存在“泄漏”,但它仅在应用程序从内存中清除之前发生。