我想知道是否有人能帮我解决下面代码中关于内存管理的问题。我对rootController特别感兴趣,它是在我执行initWithRootViewController时被保留还是(这是我的猜测)在window addSubView中被保留:我只是好奇发生了什么……
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
Base_TableViewController *rootController = [[Base_TableViewController alloc] init];
navController = [[UINavigationController alloc] initWithRootViewController:rootController];
[window addSubview:[navController view]];
[window makeKeyAndVisible];
[rootController release];
return YES;
}
- (void)dealloc {
[navController release];
[window release];
[super dealloc];
}编辑:
所以基本上上面的代码是正确的,底部的释放取消了顶部的分配,"rootController“由navController保留?
非常感谢,非常感谢。
加里
发布于 2010-08-25 19:43:46
在调用alloc init之后,rootController上的保留计数将为1。如果navController在它的initWithRootViewController消息中执行了保留,那么在该行之后,它的保留计数将是2(我非常确定UINavigationController将保留它的根视图控制器)。
将导航控制器的视图添加到窗口中不会影响根控制器的保留计数(它会增加navController的UIView成员的保留计数)。
在rootController发布之后,它会将保留计数递减到1。
编辑
是啊。事实上,您可以通过移除底部的释放并在初始分配周围粘贴一个自动释放来进一步简化代码。
发布于 2010-08-25 19:59:00
initWithRootViewController:保留rootController。和addSubview:保留navController.view
编辑:是的,确实如此。rootController版本实际上并不释放rootController,它只是将其保留计数减1,因为它已经被initWithRootViewController保留了。
https://stackoverflow.com/questions/3565409
复制相似问题