2011-12-30 6 views
0

最新のSDKとXCode 4.2のiOS 4(で、はARCです)を開発しています。PushViewController:これはメモリリークですか?

私はナビゲーションコントローラをプログラムで開発していますが、私は質問があります。

これはAppDelegate.h

#import <UIKit/UIKit.h> 

@class ViewController; 
@class SecondViewController; 

@interface AppDelegate : UIResponder <UIApplicationDelegate> 
{ 
    UINavigationController* navController; 
    ViewController* viewController; 
    SecondViewController* secondViewController; 
} 

@property (strong, nonatomic) UIWindow *window; 

- (void) showSecondViewController; 

@end 

であり、これは-(void)showSecondViewController;

は、私がこの行を追加することができ、私の質問は最後の方法についてですAppDelegate.m

#import "AppDelegate.h" 

    #import "ViewController.h" 
    #import "SecondViewController.h" 

    @implementation AppDelegate 

    @synthesize window = _window; 

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    { 
     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

     viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; 
     viewController.title = @"Menu"; 
     navController = [[UINavigationController alloc] initWithRootViewController:viewController]; 
     navController.navigationBar.tintColor = [UIColor blackColor]; 
     self.window.rootViewController = navController; 

     [self.window makeKeyAndVisible]; 
     return YES; 
    } 

- (void) dealloc 
{ 
    [_window release]; 
    [viewController release]; 
    [navController release]; 
    [secondViewController release]; 
} 
    - (void)applicationWillResignActive:(UIApplication *)application 
    { 
     ... 
    } 

    - (void)applicationDidEnterBackground:(UIApplication *)application 
    { 
     ... 
    } 

    - (void)applicationWillEnterForeground:(UIApplication *)application 
    { 
     ... 
    } 

    - (void)applicationDidBecomeActive:(UIApplication *)application 
    { 
     ... 
    } 

    - (void)applicationWillTerminate:(UIApplication *)application 
    { 
     ... 
    } 

    - (void) showSecondViewController 
    { 
     secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 
     secondViewController.title = @"Second"; 
     [navController pushViewController:secondViewController animated:YES]; 
    } 

です終わり?

[secondViewController release] 

私は、アプリケーションをプロファイリングしました、と私は任意のメモリリークを見ていません。しかし、私は確信していないので、ここでそれを尋ねなければなりません。

答えて

1

showSecondViewControllerメソッドを再度呼び出すと、メモリリークが発生します。

showSecondViewControllerメソッドでsecondViewControllerを解放する必要があります。

- (void) showSecondViewController 
{ 
    secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 
    secondViewController.title = @"Second"; 
    [navController pushViewController:secondViewController animated:YES]; 
    [secondViewController release] 
} 
それは自動的にあなたが行うとき navControllerによって保持されます

pushViewController:secondViewController

関連する問題