首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保留rootViewController?

保留rootViewController?
EN

Stack Overflow用户
提问于 2010-08-25 19:39:25
回答 2查看 1K关注 0票数 3

我想知道是否有人能帮我解决下面代码中关于内存管理的问题。我对rootController特别感兴趣,它是在我执行initWithRootViewController时被保留还是(这是我的猜测)在window addSubView中被保留:我只是好奇发生了什么……

代码语言:javascript
复制
- (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保留?

非常感谢,非常感谢。

加里

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-25 19:43:46

在调用alloc init之后,rootController上的保留计数将为1。如果navController在它的initWithRootViewController消息中执行了保留,那么在该行之后,它的保留计数将是2(我非常确定UINavigationController将保留它的根视图控制器)。

将导航控制器的视图添加到窗口中不会影响根控制器的保留计数(它会增加navController的UIView成员的保留计数)。

在rootController发布之后,它会将保留计数递减到1。

编辑

是啊。事实上,您可以通过移除底部的释放并在初始分配周围粘贴一个自动释放来进一步简化代码。

票数 3
EN

Stack Overflow用户

发布于 2010-08-25 19:59:00

initWithRootViewController:保留rootController。和addSubview:保留navController.view

编辑:是的,确实如此。rootController版本实际上并不释放rootController,它只是将其保留计数减1,因为它已经被initWithRootViewController保留了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3565409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档