代码之家  ›  专栏  ›  技术社区  ›  fuzzygoat

是否保留rootViewController?

  •  3
  • fuzzygoat  · 技术社区  · 15 年前

    我想知道是否有人能帮我在下面的代码内存管理方面。我对rootController特别感兴趣,当我用rootviewcontroller初始化时,它会被保留吗?或者相反(这是我的猜测)用windowaddsubview保留吗:我只是好奇发生了什么。。。

    - (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];
    }
    

    所以基本上上面的代码是正确的,底部的版本取消了顶部的alloc,“rootController”由navController保留?

    加里

    2 回复  |  直到 15 年前
        1
  •  3
  •   RedBlueThing    15 年前

    UINavigationController 将保留它的根视图控制器)。

    在rootController释放之后,它将把retain倒计时减少到1。

    编辑

    围绕着最初的分配。

        2
  •  3
  •   Woodstock    11 年前

    保留 根控制器 . 添加子视图: 保留 导航控制器.view

    编辑: 是的,那是真的。而且[rootController release]实际上并没有释放rootController,它只是将其retain count减少1,因为initWithRootViewController已经保留了它。