在App Delegate中我是否需要发布我的“window”和“navigationController”?

时间:2011-05-30 04:14:48

标签: iphone ios memory-management uinavigationcontroller uiapplicationdelegate

在App Delegate中我:

  1. 需要释放我的“窗口”和“navigationController”吗?和
  2. 我应该从(a)applicationDidReceiveMemoryWarning和(b)dealloc中释放出来吗?
  3. 代码清单

    @interface weekendviewerAppDelegate : NSObject <UIApplicationDelegate> {
        UIWindow                        *window;
        UINavigationController          *navigationController;
    }
    @property (nonatomic, retain) IBOutlet UIWindow *window;
    @property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
    
    @implementation weekendviewerAppDelegate
    @synthesize window;
    @synthesize navigationController;
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
        RootViewController *rootViewController = (RootViewController *)[navigationController topViewController];
        rootViewController.managedObjectContext = self.managedObjectContext;
        self.window.rootViewController = self.navigationController;
    
        // Configure and show the window
        [window addSubview:[navigationController view]];
        [window makeKeyAndVisible];
    
        return YES;
    }
    
    
    .
    .
    

2 个答案:

答案 0 :(得分:2)

正如Bolt clock所述,你需要在appDelegate类中添加一个dealloc方法。

- (void)dealloc {

    [navigationController release];
    [window release];
    [super dealloc];
}

答案 1 :(得分:0)

如果您在applicationDidReceiveMemoryWarning中发布了window或navigationController,请注意@greg。不要认为应用程序收到内存警告时应用程序会崩溃。

正如@Bolt和@ishu所说,你只需要在dealloc方法中释放它。

同样在applicationDidReceiveMemoryWarning方法中,你可以释放那些在一段时间后不会被使用的类变量,因为释放它们可能会导致你的应用程序崩溃。

因此明智地选择哪些变量不重要可能导致应用程序崩溃或阻止您的应用正常工作。