【问题标题】:application:didFinishLaunchingWithOptions: memory management应用程序:didFinishLaunchingWithOptions:内存管理
【发布时间】:2010-12-12 11:35:47
【问题描述】:

我有一个关于内存管理的问题。在我的应用程序委托中,我有以下方法;其中welcomeViewController 是一个ivar。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    welcomeViewController = [[CBWelcomeViewController alloc] init];
    UINavigationController *appNavigationController = [[UINavigationController alloc] initWithRootViewController:welcomeViewController];
    [self.window addSubview: [appNavigationController view]];
    [self.window makeKeyAndVisible];
    return YES;
}

为了释放welcomeViewController 的内存,我只需在dealloc 方法中调用release。

- (void)dealloc {
    [welcomeViewController release];
    [window release];
    [super dealloc];
}

我的问题是,管理appNavigationController的内存的正确方法是什么?

【问题讨论】:

    标签: iphone objective-c memory-management ios


    【解决方案1】:

    您应该将appNavigationController 设为实例变量,并将release 设为dealloc。

    您不需要将welcomeViewController 作为实例变量,恰恰相反。 只需分配/初始化它,然后将其传递给UINavigationController,然后它会保留它,然后立即release 它。

    【讨论】:

    • 那么我应该在哪里发布这个?如果我在addSubview:' the UINavigationController doesn't load the subview. Also, when I addSubview:, this increases appNavigationController 的保留计数为 2 之后直接释放它,那么如果我在 dealloc 中释放它,它仍然是 1(即未释放)。感谢回复
    【解决方案2】:

    你需要在 dealloc 方法中释放它,就像你当前释放welcomeViewController一样。

    (顺便说一句,您实际上应该在使用 welcomeViewController 初始化导航控制器(即:在您的 init 方法中)之后立即释放它,因为导航控制器会保留它。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-08
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      相关资源
      最近更新 更多