我使用了仪器工具,它告诉我没有内存泄漏。但我正在努力解决它背后的逻辑。为什么这不会泄漏?似乎幕后发生了一些魔法,我的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];
}
答案 0 :(得分:1)
程序的生命周期中都存在navController
和calcController
。当程序终止时,一切都被清除,所以没关系。你确实有泄漏,但是无关紧要。
答案 1 :(得分:0)
由于您的应用程序委托在应用程序运行期间存在,因此您只能在应用程序退出之前看到内存泄漏。因此,虽然技术上存在“泄漏”,但它仅在应用程序从内存中清除之前发生。